谁能用一个例子来解释为什么JPA中的@Transient注解也有@Target方法?
我指的是文档http://docs.oracle.com/javaee/5/api/javax/persistence/Transient.html
@目标(值={方法,字段})
提前致谢!
谁能用一个例子来解释为什么JPA中的@Transient注解也有@Target方法?
我指的是文档http://docs.oracle.com/javaee/5/api/javax/persistence/Transient.html
@目标(值={方法,字段})
提前致谢!
在 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
将被视为瞬态。但是 if@Id
会留在场上,而您移动@Transient
到private String getSomeTransientField()
thensomeTransientField
将被视为持久性,因为@Id
is 在场上,因此所有其他注释也应该在场上。
因此,@Transient
该方法适用的情况是这样的
private Long id;
private String someTransientField;
@Id
private Long getId() {
return this.id;
}
@Transient
private String getSomeTransientField() {
return this.someTransientField;
}
@Target
annotation 允许您定义可以使用此注释的位置,例如类、字段、方法等。指示可以使用带注释的注释类型的实例来注释哪些程序元素。
@Target(value={METHOD,FIELD})
意味着注释只能用于类型(通常是方法和字段)之上。您可以将目标放在一起,以便注释可用于类、方法和字段。
在 JPA中@Target
– 标记另一个注解@Transient
以限制该注解可以应用于哪种 Java 元素。
这意味着注解可以用在Field
或上method
。
如果该字段被注释,该字段将使用反射访问。
如果方法(getter)被注释,那么getter方法将用于访问它。