一尘不染

JPA-定义@Entity对象的多个jar

hibernate

我们正在以模块化的方式与Spring,Hibernate和Maven开发Web应用程序。有定义数据访问和查看特定内容的核心项目,还有定义逻辑和实体(@Entity)的模块,然后有定义控制器和视图的Web应用程序。

现在,我们有一个安全模块,定义了帐户和角色等安全实体,还有一个原型模块,定义了一些示例实体,例如客户和订单。两者都有一个PersistenceUnit内部定义persistence.xml,除了PersistenceUnit名称外,几乎都为空,因为所有数据库配置都是在Web应用程序中使用datasource.xml完成​​的。该Web应用程序应该将两个jar都加载为maven依赖项。

两个项目都将构建良好,自动扫描所有实体并为各自的单元测试创​​建它们。如果单独添加,它们也将成功加载到Web应用程序中。

但是,一旦两个对象同时加载,第二个对象将覆盖PersistenceUnit第一个对象的,从而为第一个`IllegalArgumentException
Not an entity对象的所有实体创建一个。如果两个项目的持久性单元都不同,则加载Web应用程序将引发另一个异常,说明已no single
default persistence unit`定义。

所以..如何才能将所有带@Entity注释的类加载到我的Web应用程序中,而不必在内部persistence.xml(如此)定义它们,而是通过组件扫描来定义它们?
似乎是个主意,尽管我不知道如何使用和测试它。

我认为我们要么必须合并Web应用程序中的所有PersistenceUnit,要么以编程方式加载所有Entities。在persistence.xml中硬编码定义它们不是我们的选择。


阅读 258

收藏
2020-06-20

共1个答案

一尘不染

我们使用类似的模块布局,但是我们将持久性上下文放置在应用程序的战争部分,并将实体管理器注入到模块的DAO中。除单元测试外,这些模块没有PU。我们这样做是因为担心跨多个模块的事务可能会引起麻烦。

在DAO中

@PersistenceContext
private EntityManager em;

在persistance.xml中,您需要使用元素来注册所有实体。

<persistence-unit name="myPU">
    <class>com.Entity1</class>      
<class>com.Entity2</class>

等等

2020-06-20