我正在使用JPA / Hibernate几年,它们非常有用。但我对设计有一些哲学上的问题。
主要问题是为什么我要将所有类属性公开(创建公共setter / getter)只是因为Hibernate想要访问它们,即使它可以在没有此权限的情况下(通过反射)访问它们,并且在此设计中使用getter和setter应该是如此简单,以减少开销,然后实际上他们放松了他们控制访问领域的理念在此设计中,getter和setter在Database Access(JPA)和System Domain之间共享,需要不同的设计标准。 (你可能不需要在从数据库加载它之前检查一个值,因为你之前已经完成了这个检查!)
任何机构都可以解释这个设计的任何原因吗?我知道它在某些情况下很有用,但在大多数情况下它不是。!
另外还有一个问题就是当从数据库加载一个对象时,setter几乎没用,因为对象被部分加载并且没有顺序(因此它几乎迫使我们实现setter如此简单而只是一个副本来自输入到提交)!答案 0 :(得分:5)
如果它们仅由Hibernate使用,您可以将您的setter保密。 来自hibernate documentation:
Hibernate可以访问公共,私有和受保护的访问器方法, 以及公共,私人和受保护的领域。选择 取决于您,您可以匹配它以适合您的应用程序设计。
无参数构造函数是所有持久性的要求 班; Hibernate必须使用Java为您创建对象 反射。构造函数可以是私有的,但是包或公共的 运行时代理生成和高效数据需要可见性 没有字节码检测的检索。