我正在开发一个项目,该项目将使用JPA将实体持久化到数据库。我们将使用Maven作为项目管理框架。我想知道是否可以为POJO创建一个项目,为持久性定义创建另一个项目,然后将两者“合并”到包含POJO及其持久性信息的单个输出中。
基本上我试图将POJO的代码与持久性定义分开。因为POJO可能被几个不同的项目重用,这些项目可能需要或可能不需要持久保存,并且可能或可能不想更改持久性信息。 (与Is it possible to build a JPA entity by extending a POJO?相似但不完全相同)
我对如何做到这一点有两个想法。如果我在Web应用程序中使用POJO,我可以提供persistence.xml并映射该项目中的类,只需向包含POJO的项目添加依赖项。但是如果我想创建一个包含持久性信息和POJO的jar文件,我想我可以使用shade插件吗?
有没有其他方法可以将两个maven项目合并为一个输出,这是否合理?
答案 0 :(得分:0)
如果我没记错,那么如果您没有使用它们,那么注释就不必在类路径上。仍然可以加载带注释的类。
所以我的建议是:
答案 1 :(得分:0)
我非常感谢输入。最后,我的解决方案是创建两个项目。第一个提供了POJO的定义,没有任何JPA信息。是的,有一些JPA相关的成员,如id,但我会解决这些。第二个项目包含JPA元数据(orm和持久性XML文件)。
至于与持久性相关的成员(例如id)我可能和模型类中的成员一起生活但是使用了这篇文章中的建议(Is it possible to build a JPA entity by extending a POJO?)我扩展了我的POJO类并在“实体”中声明了id “子课程。在根据成员访问权限定义POJO时,这需要考虑一些因素。
有一点需要注意,当您拥有类层次结构(模型中的继承)时,此解决方案会遇到麻烦。 “纯”模型中的类继承自一些常见的类。然后在“持久性”模型中扩展该类,以提供id和其他持久性相关的成员。现在,如果持久子类继承自“纯”模型中的类,则它们不会继承id和其他持久成员。
在不同的继承映射中可能存在变通方法,例如每个具体类的表。