为啥 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.6
和Spring 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
,所以添加<property name="annotatedPackages">
helped。
使用 Hibernate 3,而不是 AnnotationSessionFactory
,我必须拨打 configuration.addPackage('bla.bla.com')
电话 - 这就像一个魅力。谢谢!
你能告诉我如何使用 EntryManagerFactory 添加这个休眠映射条目例如:对于 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?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Hibernate 会为此 HQL 抛出 QuerySyntaxException?