gpt4 book ai didi

java - hibernate 实体 setter 中的额外操作

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:41 25 4
gpt4 key购买 nike

我正在使用 hibernate 开发一个遗留项目。有时我会发现开发人员在实体对象的 set 方法中编写了额外的代码。我想知道这是否是一种可接受的做法? hibernate 实体对象不应该只是带有额外注释的 pojo 类,也许还有一些 @Transient 辅助方法吗?

如果你想做额外的操作,这不是与实体一起工作的服务/dao 的责任吗?

最佳实践是什么?有谁知道解释这一点的博客或公认的文章吗?

最佳答案

恕我直言,两种方法都是正确的。它们都有其优点和缺点。这关系到永恒Anemic model vs DDD (Domain-driven design) war 。

关于Hibernate,它是相当灵活的。它可以让您采取任何您想要的方法。解决方案的性能和正确性并不取决于您所做的决定,而是取决于查询、数据库索引、实体获取策略、所选算法、I/O 处理、并发实现、事务管理等的正确性。

如果按照 DDD,实体将是业务层的一部分,而 Hibernate 本身(Session、SessionFactory 和整个 ORM)将是持久层的一部分。在这种情况下,实体将包含与持久性相关的注释,这只是 ORM 的提示

您还应该小心事务管理。这在实体之外可以更好地完成。 (实际上,贫乏模型的一个主要优点是事务管理非常容易,因为您将业务层的每个服务方法包装在事务单元内)。

正如您所提到的,您混合了两种“意识形态”,也许您可​​以利用这一事实作为优势:让服务方法将逻辑委托(delegate)给域实体,但将事务管理保留在业务服务中。

关于java - hibernate 实体 setter 中的额外操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29007343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com