【发布时间】:2016-08-16 06:07:24
【问题描述】:
我想注释我的字段,因为 getter 和 setter 大部分时间是由 IDE 生成的。
当我用@Id 注释标识符字段时,实体的访问策略变为基于字段的。但是,我不想在调用getId() 时出现延迟初始化异常,以防实体被延迟加载。
我想对字段进行注释,但我也想拥有基于属性的访问策略。我该怎么做?
我将@Access(AccessType.PROPERTY) 放在我的实体类之上,但随后我的 JPA 提供程序(即 Hibernate)抛出 org.hibernate.AnnotationException: No identifier specified for entity: ...
【问题讨论】:
-
请多解释一下为什么需要这个?属性/字段访问定义 JPA 提供程序如何访问您的实体和注释,而不是您的应用程序如何访问,因此它应该与任何延迟初始化问题无关。
-
您可以发布您的实体或它的样本吗?否则很难猜出您遇到问题的原因。
-
@Chris,休眠通过字段访问它,因为注释在字段之上,但我的其他类调用 getId(),因为 id 通常是私有的。如果实体是延迟加载的,则会导致异常。我想继续注释字段,但能够毫无问题地调用 getId。这仅适用于 id 字段。
-
对方法进行注释应该对是否加载“id”值没有影响。如果未设置字段访问权限,则不会设置属性访问权限。
-
@Chris,我以同样的方式思考,但我尝试并观察到,如果我注释字段,并在延迟加载的实体上调用 getId,我会得到异常。但是,如果我在 getId 上进行注释,并在同一场景中调用 getId,则不会出现异常。