为什么JPA实体中的属性不允许“公开”?

时间:2010-01-11 09:21:54

标签: java jpa java-ee

JPA 2.0 specification在第22页上说:

  

类的实例变量必须   是私人的,受保护的或包装的   能见度与是否无关   现场访问或属性访问是   用过的。使用属性访问时,   属性访问器方法必须是   公共或受保护。

为什么不允许公共访问?

3 个答案:

答案 0 :(得分:10)

对于公共字段,代理无法可靠地工作 - 如果有人直接访问字段,那么持久性框架没有简单的方法来拦截该调用并且(比如)初始化包含对象,如果这是代理人。

如果无法进行字段访问,则可以在代理对象上生成合成getter方法,以拦截方法调用并执行任何所需的“幕后”工作。

答案 1 :(得分:4)

使用DataNucleus作为JPA提供程序,您可以使用公共字段,然后您需要将访问这些字段的任何类标记为“持久感知”(请参阅​​DataNucleus文档),因此它们可以是增强以满足此

答案 2 :(得分:-1)

确保使用访问器方法(例如get ... set .... is ....)。这是隔离原则的一部分。