从POJO

时间:2015-07-22 15:27:24

标签: java maven jpa

我正在开发一个项目,该项目将使用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项目合并为一个输出,这是否合理?

2 个答案:

答案 0 :(得分:0)

如果我没记错,那么如果您没有使用它们,那么注释就不必在类路径上。仍然可以加载带注释的类。

所以我的建议是:

  • 坚持使用JPA注释,因为这是定义映射的最简单方法,工具支持通常更好。
  • 将JPA依赖项声明为可选,也可能将声明为
  • 如果需要覆盖注释定义的映射,应该可以使用persistence.xml,AFAIK(从未尝试过)来执行此操作。

答案 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和其他持久成员。

在不同的继承映射中可能存在变通方法,例如每个具体类的表。