[英]Can properties mapped in hbm.xml be transient?
假設我有一個像這樣的User
實體:
class User {
private String login;
transient private String hashedPassword;
}
我不想將hashedPassword
轉移到客戶端,因此我將其設置為瞬態。
該類由Hibernate映射,兩個字段都映射在hbm.xml中。
這種實施安全和正確嗎? Hibernate會在數據庫中正確存儲hashedPassword
,將其從數據庫加載到對象中,將其保存在復制的二級緩存和本地會話緩存等中嗎?
順便說一句,Hibernate或二級緩存是否以任何方式對transient
或完全忽略它?
編輯 :我已經有兩個答案似乎沒有包括等式的一個特定方面。 我根本沒有使用注釋,只使用hbm.xml
XML映射。 這個Java瞬態字段在hbm.xml
OR映射。
hibernate不保存未映射/瞬態屬性 。
Hibernate理解標准java瞬態修飾符的重要性 - 但是如果您選擇的話,還允許您使用@Transient注釋將屬性注釋為瞬態...或者只是將字段完全從映射文件中刪除。
在你的情況下,你可能不需要做任何特別的事情,hibernate應該簡單地“做正確的事”,忽略未映射的字段。
所以:這里吸取的教訓 -
如果只使用hbm.xml
1)休眠不保存未映射的屬性 - 它們實際上是瞬態的。
如果使用POJO
2)Hibernate將忽略保存“@Transient”注釋變量:
@Transient
int ignored=0;
3)Hibernate也會忽略使用標准“瞬態”修飾符保存變量:
private transient int ignored =0;
請參閱http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/以獲得對此的出色解釋。
看起來Hibernate不會持有帶有transient
關鍵字的字段,無論你有什么其他注釋。
單獨的@Transient
注釋將允許您指示Hibernate忽略非瞬態字段的持久性,但我不認為可能與Hibernate持續存在transient
字段相反。
這里類似的討論:
通過上面最相關的引用,來自JPA 2.0規范:“映射注釋不得應用於transient
或@Transient
字段或屬性。”
這就是我的想法 - Hibernate只是一種映射技術。 當您將字段標記為TRANSIENT時,它將不會被java持久化。 並且由於它的狀態沒有持久化,為什么hibernate應該在L2緩存中維護它等等? 所以即使你在hbm文件中映射瞬態字段,hibernate應該沒有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.