我们正在以模块化的方式与Spring,Hibernate和Maven开发Web应用程序。有定义数据访问和查看特定内容的核心项目,还有定义逻辑和实体(@Entity)的模块,然后有定义控制器和视图的Web应用程序。
@Entity
现在,我们有一个安全模块,定义了帐户和角色等安全实体,还有一个原型模块,定义了一些示例实体,例如客户和订单。两者都有一个PersistenceUnit内部定义persistence.xml,除了PersistenceUnit名称外,几乎都为空,因为所有数据库配置都是在Web应用程序中使用datasource.xml完成的。该Web应用程序应该将两个jar都加载为maven依赖项。
PersistenceUnit
persistence.xml
两个项目都将构建良好,自动扫描所有实体并为各自的单元测试创建它们。如果单独添加,它们也将成功加载到Web应用程序中。
对象的所有实体创建一个。如果两个项目的持久性单元都不同,则加载Web应用程序将引发另一个异常,说明已
所以..如何才能将所有带@Entity注释的类加载到我的Web应用程序中,而不必在内部persistence.xml(如此处)定义它们,而是通过组件扫描来定义它们? 这似乎是个主意,尽管我不知道如何使用和测试它。
我认为我们要么必须合并Web应用程序中的所有PersistenceUnit,要么以编程方式加载所有Entities。在persistence.xml中硬编码定义它们不是我们的选择。
我们使用类似的模块布局,但是我们将持久性上下文放置在应用程序的战争部分,并将实体管理器注入到模块的DAO中。除单元测试外,这些模块没有PU。我们这样做是因为担心跨多个模块的事务可能会引起麻烦。
在DAO中
@PersistenceContext private EntityManager em;
在persistance.xml中,您需要使用元素来注册所有实体。
<persistence-unit name="myPU"> <class>com.Entity1</class> <class>com.Entity2</class>
等等