3

谁能用一个例子来解释为什么JPA中的@Transient注解也有@Target方法

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

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

提前致谢!

4

3 回答 3

1

在 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会留在场上,而您移动@Transientprivate String getSomeTransientField()​​thensomeTransientField将被视为持久性,因为@Idis 在场上,因此所有其他注释也应该在场上。

因此,@Transient该方法适用的情况是这样的

private Long id;

private String someTransientField;

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

@Transient
private String getSomeTransientField() {
    return this.someTransientField;
}
于 2016-07-26T11:53:37.433 回答
0

@Targetannotation 允许您定义可以使用此注释的位置,例如类、字段、方法等。指示可以使用带注释的注释类型的实例来注释哪些程序元素。

@Target(value={METHOD,FIELD})意味着注释只能用于类型(通常是方法和字段)之上。您可以将目标放在一起,以便注释可用于类、方法和字段。

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

于 2016-07-26T12:06:04.710 回答
0

这意味着注解可以用在Field或上method

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

如果方法(getter)被注释,那么getter方法将用于访问它。

于 2016-07-26T12:17:56.467 回答