gpt4 book ai didi

java - 如何配置 hibernate 以扫描不同模块中的实体

转载 作者:IT老高 更新时间:2023-10-28 21:02:47 25 4
gpt4 key购买 nike

我有模块 A 和模块 B,它们都有 JPA 注释类。模块 B 有一个单元测试,它从 A 中提取了几个这样的实体。两个模块都编译正常,运行时依赖项设置正常,但是当我尝试运行单元测试时出现以下错误:

java.lang.IllegalArgumentException: Unknown entity: MyClassHere
Caused by: org.hibernate.MappingException: Unknown entity: MyClassHere

这发生在 EntityManager.merge 调用中。

由于模块 B 具有所有 hibernate 配置文件等,我猜它根本没有从 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 可能不会扫描那些。

最佳答案

如果您将项目配置为自动检测实体,它只会扫描 META-INF/persistence.xml 所在的路径(默认情况下)。

除了:

<exclude-unlisted-classes>false</exclude-unlisted-classes>

你设置了一个额外的 hibernate 选项:

<property name="hibernate.archive.autodetection" value="class, hbm" />

它确定 Hibernate Entity Manager 自动发现的元素。

对于额外的实体(在其他 jar 中),您可以在主 persistence.xml 文件中设置 jar-file 部分:

<persistence>
<persistence-unit name="myUnit">
...
<class>foo.bar.Entity1</class>
<class>foo.bar.Entity2</class>
<jar-file>moduleB.jar</jar-file>
...
</persistence-unit>
</persistence>

jar-file 元素指定对包含托管持久性类的打包持久性单元可见的 JAR 文件,而 class 元素显式命名托管持久性类。

META-INF 目录中包含persistence.xml 的JAR 文件或目录称为持久单元的根。持久化单元的范围由持久化单元的根决定。每个持久性单元必须用一个对持久性单元的范围唯一的名称来标识。

问候,安德烈

关于java - 如何配置 hibernate 以扫描不同模块中的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com