【发布时间】:2015-10-12 14:08:23
【问题描述】:
我正在开发一个项目,该项目将使用 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 项目合并到一个输出中,这是一个合理的做法吗?
【问题讨论】:
-
为什么在非 JPA 应用程序中需要 JPA 类?会有一些字段,例如技术主键、乐观锁定的版本字段等,这些字段在 JPA 应用程序之外可能没有任何意义,并且可能不应该被访问。
-
这就是重点。在非 JPA 应用程序中,我真的不需要 JPA。这些类可以在不需要持久化数据或想改变它的持久化方式的应用程序中重用。所以,我想我想将 JPA 内容(映射、注释等)与我的对象模型的其余部分分开。是的,可能有一些不必要的成员,例如 id,但我可能(也许我应该)通过使 POJO 的实体类扩展并将它们映射为映射超类来解决这个问题。 ...也许在我有更多需要之前,我不应该过度设计东西。