Java 为什么JPA瞬态注释在目标中有方法?

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中的@Transient注释也有@Target方法吗

我指的是文件

@目标(值={方法,字段})


提前谢谢

在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更适合在方法上使用,而不是在字段上使用?