我目前正在使用 hibernate 和 JPA 开发一个 Java EE 项目,并且面临一个我真的不知道如何处理的问题。这是项目的布局:
有一个模块,我们称之为 module A
,其中有一个 persistence.xml 和许多映射到数据库的实体。我即将添加新功能,由于新功能有其自己的职责,我有一个新模块 module B
,有自己的 persistence.xml。两者module A
和module B
部署为 JBoss 中的耳朵。
数据库的设计(这是最终的且无法更改)需要 module B
中的实体之一在module A
中有一个外键。在B的persistence.xml中我添加了<class>
- 外键的标签,以便 hibernate 可以找到它。外键实体类本身具有对其他实体的引用,因此我也必须将它们添加到 persistence.xml 中。我的问题是,其中一个实体有一个构造函数表达式 jpql 查询,将实体中的数据选择到常用的 POJO 中。在 module B
当 hibernate 尝试解决所有 <class>
时-tags 它提示 JPQL 查询无效(因为它不知道 POJO)。有没有办法让模块B中的持久化单元知道这个对象?我真的很想将所有类(class)留在 module A
未受影响,因为它们是一种“遗留代码”,我知道它们已经可以工作了(更改它们可能会破坏模块 A 的结构)。
最佳答案
我终于找到了问题所在,这是我的解决方法。
当我专门添加 module A
中的类时至module B
与 <class>
-tag 我不小心添加了一个父类(super class),其中包含hibernate认为错误的查询。事实上,如果只查看该父类(super class),则查询是错误的,因为其中一个变量仅可用
在子类中(查询如下所示: select new MyPojoClass(x.id, x.var1, x.var2, x.variableAvailableInSubClass) from MyTable x
)。为了解决这个问题,我添加了所有子类 <class>
,使 hibernate 能够解析所有依赖项和查询。
关于java - hibernate中具有多个模块的构造函数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321961/