为啥 Hibernate 会忽略 package-info.java?

Posted

技术标签:

【中文标题】为啥 Hibernate 会忽略 package-info.java?【英文标题】:Why would Hibernate ignore package-info.java?为什么 Hibernate 会忽略 package-info.java? 【发布时间】:2012-05-17 14:39:53 【问题描述】:

我正在尝试在包级别上使用 Hibernate @TypeDef 注释,正如 Hibernate documentation 中所描述的那样。 我正在使用Hibernate 3.6Spring 3.0.7。代码编译,package-info.class 在类路径中,但 Hibernate 仍然看不到它。

如果我将@TypeDef 放在班级级别上,它就可以工作,但如果我把package-info 放在上面就不行。我试图用谷歌搜索,但找不到任何有用的东西。

谢谢!

【问题讨论】:

【参考方案1】:

你可能需要添加一个

<resource package="com.foo.bar.thepackage"/>

到您的 Hibernate 配置文件,或调用 configuration.addPackage("com.foo.bar.thepackage")。

【讨论】:

行得通,谢谢!我正在使用AnnotationSessionFactoryBean,所以添加&lt;property name="annotatedPackages"&gt;helped。 使用 Hibernate 3,而不是 AnnotationSessionFactory,我必须拨打 configuration.addPackage('bla.bla.com') 电话 - 这就像一个魅力。谢谢! 你能告诉我如何使用 EntryManagerFactory 添加这个休眠映射条目例如: com.foo.bar.thepackage 【参考方案2】:

对于 Hibernate 4,您必须添加

<mapping package="com.foo.bar.thepackage">

到你的 Hibernate 配置文件。

【讨论】:

【参考方案3】:

如果使用 JPA,则使用

persistence.xml 中的
com.foo.bar.thepackage
也应该可以工作。

【讨论】:

这对我有用,我正在使用 persistence.xml。根据 2.2.1 节中的 jboss docs 类属性。包装:docs.jboss.org/hibernate/entitymanager/3.6/reference/en/…【参考方案4】:

我认为这是由于 Spring 中的一个错误,它不会扫描 package-info 中的注释,而只会扫描带有 @Entity、@Embeddable 或 @MappedSuperclass 注释的类上的注释。见https://jira.springsource.org/browse/SPR-8589。

【讨论】:

在 3.2.2.RELEASE 版本中修复 对于遇到此问题的人,我建议您查看 SPR-8589 的 cmets。虽然在 Spring 3.2.2 中解决了一些问题,但在 Spring 4.1 甚至更高版本之前,将它与 JPA 一起使用并没有真正开始工作。也可以看一下联票SPR-10910的cmets。

以上是关于为啥 Hibernate 会忽略 package-info.java?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 .tfignore 文件不忽略我的包文件夹

为啥 Hibernate 会为此 HQL 抛出 QuerySyntaxException?

JPA Spring Boot Hibernate Rest API:为啥Hibernate在插入之前会删除?

为啥搜索引擎会忽略符号? [关闭]

为啥 Python 请求会忽略 verify 参数?

为啥 Javascript 会忽略单行 HTML 注释?