我有基于DDD概念开发的领域模型,几乎是面向对象的,并且具有状态和行为。问题是为了使用Hibernate,所有持久化属性必须有getter和setter。这并不吸引人,因为我不想为我的域对象的某些属性引入setter。我应该将我的域对象映射到DTO,其唯一目的是仅维护数据。
答案 0 :(得分:3)
一般来说,这两个概念是相同的。域模型用于从问题域的角度描述对象的模型(即用于解决特定问题或一组问题的信息),并使用实体模型来描述对象的模型。演员系统的观点(在许多情况下,这是一些使用该模型来解决问题并且行为在实体上的应用程序)。
所以,总的来说,它们是一回事。
也就是说,Hibernate 非常灵活,一般来说,不需要你对持久化对象结构做任何事情。关键在于如何定义映射。在任何情况下,我都不建议让DTO处理持久化数据。 Hibernate在内部使用代理完成这一切......这就是它的工作。添加更多类只会增加应用程序的复杂性,并不会带来太多好处。更复杂的几乎永远是一件好事。
使用Hibernate,您可以拥有私有的setter,或者只让Hibernate在字段上操作并完全忽略getter / setter。在第一种情况下,您仍然引入了一个setter,但它是私有的,因此它不会影响该类的公共API。通过字段访问,Hibernate不需要为属性提供任何 getter或setter,但它也可以解决您可能必须执行的任何逻辑,例如设置瞬态(非持久化)对象的属性。
阅读Hibernate手册,特别是有关映射的部分。这是一个非常灵活的ORM,它不会限制你的任何东西。