Java 为什么JPA瞬态注释在目标中有方法?
有人能举例说明为什么JPA中的@Transient注释也有@Target方法吗 我指的是文件 @目标(值={方法,字段})Java 为什么JPA瞬态注释在目标中有方法?,java,annotations,java-annotations,Java,Annotations,Java Annotations,有人能举例说明为什么JPA中的@Transient注释也有@Target方法吗 我指的是文件 @目标(值={方法,字段}) 提前谢谢 在JPA实体中,您可以注释字段或方法(getter)。@Id注释说明了这一点,这意味着如果将@Id放在字段上,则所有注释都应放在字段上,但如果将其放在例如@Id Long getId()上,则其他注释应随之出现。这就是为什么@Transient也可以在方法上 例如,如果你有这个 @Id private Long id; @Transient private St
提前谢谢 在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
移动到私有字符串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
注释允许您定义此注释的使用位置,例如,类、字段、方法等。它指示哪些程序元素可以使用注释类型的实例进行注释
@Target(value={METHOD,FIELD})
意味着注释只能在类型(通常是方法和字段)之上使用。您可以将目标一起省略,以便注释可以用于类、方法和字段
在JPA
@Target
–标记另一个注释@Transient
,以限制注释可应用于哪种java元素。这意味着注释可用于字段
或方法
如果字段已注释,则将使用反射访问该字段
如果方法(getter)被注释,那么getter方法将被用来访问它。您可以通过getter方法或字段来访问transient属性,这就是为什么在方法上允许它有意义吗?仅允许在字段上使用是不够的?不,您可以使用反射或getter方法编程来访问字段。这与JPA无关,只与基本java注释无关。您能否帮助我们举一个例子,说明@Transient更适合在方法上使用,而不是在字段上使用?