具有多个模块的hibernate中的构造函数表达式

时间:2016-02-10 17:28:43

标签: java xml hibernate jpa entity

我目前正在使用hibernate和JPA开发一个Java EE项目,我正面临着一个我真的不知道如何处理的问题。这是项目的布局:

有一个模块,我们称之为module A,它有一个persistence.xml和许多映射到数据库的实体。我即将添加新功能,并且由于新功能有自己的职责,我有一个新模块module B,它有自己的persistence.xml。 module Amodule B都被部署为JBoss中的耳朵。

数据库的设计(最终且无法更改)要求module B中的某个实体在module A中拥有外键。在B的persistence.xml中,我向外键添加了<class> - 标签,以便hibernate可以找到它。外键实体类本身就引用了其他实体,因此我不得不将它们添加到persistence.xml中。我的问题是其中一个实体有一个构造函数表达式jpql查询,从实体中选择数据到通常的POJO。在module B当hibernate尝试解析所有<class> - 标记时,它会抱怨JPQL查询无效(因为它不知道POJO)。有没有办法让模块B中的持久性单元知道这个对象?我真的希望保留module A中的所有类都不受影响,因为它们是一种“遗留代码”,我知道它已经可以工作(将它们分解可能会破坏模块A的结构)。

1 个答案:

答案 0 :(得分:0)

我终于找到了问题,这是我的修复。

当我使用module A标记专门添加从module B<class>的类时,我偶然添加了一个超类,其中包含hibernate认为错误的查询。实际上,如果仅查看该超类,则该查询是错误的,因为其中一个变量仅可用 在子类中(查询如下所示:select new MyPojoClass(x.id, x.var1, x.var2, x.variableAvailableInSubClass) from MyTable x)。为了解决这个问题,我改为使用<class>添加所有子类,使hibernate能够解析所有依赖项和查询。