【发布时间】:2016-01-23 04:41:45
【问题描述】:
我有模块 A 和模块 B,它们都有 JPA 注释类。模块 B 有一个单元测试,它从 A 中提取了几个这样的实体。 两个模块都编译正常,运行时依赖项设置正常,但是当我尝试运行单元测试时出现以下错误:
java.lang.IllegalArgumentException: Unknown entity: MyClassHere
Caused by: org.hibernate.MappingException: Unknown entity: MyClassHere
这发生在 EntityManager.merge 调用中。
由于模块 B 具有所有休眠配置文件等,我猜它根本没有从 A 中提取我的类是一个实体。
我尝试将以下内容添加到 persistence.xml
<exclude-unlisted-classes>false</exclude-unlisted-classes>
在 hibernate.cfg.xml 我添加了:
<property name="packagesToScan">myNamespace.*</property>
然后:
<property name="packagesToScan">
<array>
<value>myNamespace.*</value>
</array>
</property>
这给了我一个错误,即“属性”的内容必须匹配空值。 然后我尝试了:
<mapping class="myNamespace.*" />
我错过了什么?
编辑:我忘了提到可能很重要的一件事是这两个模块设置为单独的项目(我使用的是 eclipse),因此目录结构不同。运行时依赖项都已正确设置,但由于 .class 文件最终位于不同的目录中,我认为 hibernate 可能不会扫描那些。
【问题讨论】:
-
你在使用 Spring 吗?我有一个类似的设置,它正在使用LocalContainerEntityManagerFactoryBean 中提供的setPackagesToScan 覆盖。
-
你能用
<property name="packagesToScan">myNamespace</property>试试吗(即没有.*):这个属性应该指向要扫描的类的父包。例如。如果MyEntity类在包my.package.MyEntity中,你会写<property name="packagesToScan">my.package</property> -
试过了,还是不行……