我目前只使用JPA注释,但我真的不喜欢我用这么多ORM细节来污染我的实体类,这些细节与他们的行为无关(例如表名,id生成策略,连接列) ...)。
我看到DataNucleus recommends putting ORM-related annotations in XML instead(粉红色的那些),但我没有看到任何其他实现推荐这个,JPA似乎没有将注释分成这两个组(我认为JDO确实如此)。 / p>
是否有人以这种方式使用注释+ orm.xml,您有什么经历?
它会从我的实体课程中消除一些污染,还是会遇到问题?
答案 0 :(得分:5)
我们在半定期的基础上遇到的最大问题是,如果您想单独使用注释以任何方式更改持久性映射,则需要重新编译和重新部署。
使用orm.xml为您提供了一定程度的抽象,可以使重新配置更直接,并且可以通过技术上相同的代码库实现(例如,您确定一行代码没有隐藏到您的内容中)重新编译/重新部署。)
您可以同时使用注释和配置 - 这是我正在使用的环境 - 类使用功能类型持久性元数据(即外键,连接等)进行注释 - 具有代码级别表示)而无关信息(即表/列名称)存储在配置文件中。
当我们使用一种配置机制而不是另一种配置机制时,我们仍在尝试开发一些明确的启发式方法,但我们已经到了那里。
答案 1 :(得分:1)
JPA实体只是Java Beans(定义getter和setter的类),带有可选的支持代码(构造函数,hashCode,equals,命名查询,复制方法,还有什么?),即使包含所有类型的JPA注释,也很难被视为污染。
在Java注释和xml之间拆分元数据的真正目的是简化和优化部署策略。您将承担的价格是双重的:
在平均大型开发团队工作时,两者都是相当严肃的考虑因素。
如果重新编译数据库更改会给您的部署过程带来重大挑战,那么这听起来是一种合理的方法。但价格将是更复杂的开发环境和流程维护政策。