2016-07-26 52 views
2

任何人都可以解釋爲什麼@Transient註解在JPA有@Target 方法以及?爲什麼JPA瞬態註釋在Target中有方法?

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

@Target(值= {METHOD,FIELD})

提前感謝!

+0

您可以通過getter方法或字段訪問瞬態屬性,這就是爲什麼它具有 – Saravana

+0

如何讓它在方法上有意義?只允許在田野上不夠用? – user2906555

+0

不,您可以使用反射或getter方法編程訪問字段。 – Saravana

回答

0

在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; 
} 
+0

你可以幫助一個@Transient更適合在方法上使用而不是在現場使用的例子嗎? – user2906555

+0

我已經添加了一個例子,希望能夠說清楚。 –

+0

這使事情變得清晰。感謝你的回答。 – user2906555

0

@Target註解讓您可以定義這個註解可以使用,例如,類,字段,方法等指示哪個節目元素(s)可以使用帶註釋的註釋類型的實例進行註釋。

@Target(value={METHOD,FIELD})意味着註釋只能用於類型的頂部(通常是方法和字段)。您可以將目標放在一起,這樣註釋可以用於類,方法和字段。

在JPA @Target中 - 標記另一個註釋@Transient以限制註釋可應用於哪種類型的java元素。

0

這意味着註釋可用於Fieldmethod

如果該字段已註釋,則將使用反射來訪問該字段。

如果方法(getter)被註釋了,那麼將使用getter方法來訪問它。