簡體   English   中英

可以在hbm.xml中映射的屬性是暫時的嗎?

[英]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 - 在模型中使用注釋

注釋@Basic到瞬態變量

通過上面最相關的引用,來自JPA 2.0規范:“映射注釋不得應用於transient@Transient字段或屬性。”

這就是我的想法 - Hibernate只是一種映射技術。 當您將字段標記為TRANSIENT時,它將不會被java持久化。 並且由於它的狀態沒有持久化,為什么hibernate應該在L2緩存中維護它等等? 所以即使你在hbm文件中映射瞬態字段,hibernate應該沒有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM