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

JPA 2.0规范在第22页说:

类的实例变量必须是私有的,受保护的或包可见性,与是否使用字段访问或属性访问无关。 使用属性访问时,属性访问器方法必须是公共的或受保护的。

为什么不允许公共访问?

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

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

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

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