我们正在以模块化的方式开发Spring,Hibernate和Maven的Web应用程序.有定义数据访问和查看特定内容的核心项目,然后有定义逻辑和实体的模块(@Entity)然后是定义控制器和视图的Web应用程序.
现在我们有一个安全模块定义了帐户和角色等安全实体,我们有一个原型模块定义了一些示例实体,如客户和订单.两者都有一个PersistenceUnit定义的内部a persistence.xml,除了PersistenceUnit名称之外几乎是空的,因为所有数据库配置都是在带有datasource.xml的web应用程序中完成的.Web应用程序应该将两个jar加载为maven依赖项.
这两个项目都可以构建好的,自动扫描所有实体并为各自的单元测试创建它们.如果单独添加,它们也将成功加载到Web应用程序中.
但是,只要两者同时加载,第二个将覆盖PersistenceUnit第一个,从而IllegalArgumentException : Not an entity为第一个实体创建一个.如果两个项目都有不同的持久性单元,加载Web应用程序将抛出另一个异常,说明已no single default persistence unit定义.
那么..我怎样才能@Entity在我的网络应用程序中加载所有带注释的类而不必在里面定义它们persistence.xml(比如这里),而是通过组件扫描?
这似乎是一个想法,虽然我不知道如何使用和测试它...
我想我们要么必须在Web应用程序中合并所有PersistenceUnits,要么以编程方式加载所有实体.在persistence.xml中定义硬编码不是我们的选择.