为什么 JPA Transient 注解在 Target 中有方法?

Why JPA Transient annotation have method in Target?

任何人都可以使用示例解释为什么 JPA 中的 @Transient 注释也有 @Target method 吗?

我指的是文档 http://docs.oracle.com/javaee/5/api/javax/persistence/Transient.html

@Target(value={METHOD,FIELD})

提前致谢!

在 JPA 实体中,您可以注释字段或方法 (getter)。 @Id 注释规定了这一点,这意味着如果你将 @Id 放在一个字段上,那么你所有的注释都应该放在字段上,但是如果你把它放在 @Id Long getId() 上,那么其他注释应该跟随.这就是 @Transient 也可以在方法上的原因。

例如,如果你有这个

@Id
private Long id;

@Transient
private String someTransientField;

private Long getId() {
    return this.id;
}

private String getSomeTransientField() {
    return this.someTransientField;
}

然后 someTransientField 将被视为瞬态。但是如果 @Id 会留在场上,而你将 @Transient 移动到 private String getSomeTransientField() 那么 someTransientField 将被视为持久的,因为 @Id 在场上并且因此,所有其他注释也应出现在字段上。

所以 @Transient 对方法起作用的情况是这样

private Long id;

private String someTransientField;

@Id
private Long getId() {
    return this.id;
}

@Transient
private String getSomeTransientField() {
    return this.someTransientField;
}

@Target 注释允许您定义可以使用此注释的位置,例如,class、字段、方法等指示可以使用annotated 注释类型。

@Target(value={METHOD,FIELD}) 表示注解只能用于类型(通常是方法和字段)之上。您可以将目标放在一起,这样注解就可以同时用于两者 class es、方法和字段。

在 JPA 中 @Target – 标记另一个注解 @Transient 以限制可以将注解应用于哪种 java 元素。

表示注解可以用在Fieldmethod上。

如果该字段被注释,该字段将使用反射访问。

如果 method(getter) 被注解,那么 getter 方法将被用来访问它。