5

为什么将 jpa 注释应用于字段或 getter 方法。如果我尝试在 setter 方法上应用注释,则编译器会生成错误。因为编译器忽略了 setter 方法的注释。他们背后的原因是什么?

4

3 回答 3

13

这就是它的指定方式。根据JPA 规范

  • 当使用基于字段的访问时,实体类的对象/关系映射注解注解实例变量,持久化提供者运行时直接访问实例变量。所有未使用 Transient 注解的非瞬态实例变量都是持久的。
  • 当使用基于属性的访问时,实体类的对象/关系映射注解注解 getter 属性访问器[7],持久化提供者运行时通过属性访问器方法访问持久化状态。所有未使用 Transient 注释注释的属性都是持久的。
  • 映射注释不得应用于瞬态或瞬态的字段或属性。

你有两个选择。使用字段级注释或属性(getter 方法)注释。没有第三种选择。

于 2012-12-25T06:26:50.067 回答
2

因为对于一个对象,只有两种方法可以访问属性,直接访问字段或间接访问 getter。

对于实体bean,注解指定如何将属性映射到列,而JPA需要访问实体的这些状态,所以我想这是直接将注解放在字段上或getter上的最直观的方式。

于 2012-12-25T06:43:17.343 回答
1

当我们在 getter 上放注解时,JPA 通过 getter 访问属性。不需要在 setter 上放注解。

于 2012-12-25T06:18:18.613 回答