2012-03-09 27 views
10

在hibernate HBM文件中,設置以下屬性的目的是什麼?在休眠中設置更新和插入屬性

update = "false" 
insert = "false" 

它們的用途是什麼?他們對錶演有什麼不同?我們應該何時使用它們?

回答

7

the documentation

更新,插入(可選 - 默認爲true):指定該 對應的字段是否被包括在SQL UPDATE和/或INSERT 語句。將兩者都設置爲false允許一個純粹的「派生」屬性 ,其值從映射到相同列的某個其他屬性初始化,或通過觸發器或其他應用程序初始化。

+1

使用它的優點是什麼? – Chillax 2012-03-09 20:03:01

+3

沒有優勢。如果不希望更新列(例如,如果它由觸發器或另一列更新),則設置update = false。如果不希望列被插入(例如,如果它是由觸發器或其他列初始化的),則將insert設置爲false。在99%的情況下,將其保留爲默認值:true。 – 2012-03-09 20:11:08

+0

我該如何做一套(孩子)? – PhantomReference 2017-04-21 09:57:35

10

當屬性被計算/派生,或者當數據庫或觸發器負責插入/或更新值時,使用update =「false」,insert =「false」。例如,如果數據庫會自動在您想要使用的INSERT上生成一個值,那麼指定insert =「false」,這樣Hibernate就不會在INSERT語句中包含該屬性。

另一個例子是通過SQL公式計算/派生的屬性:例如,您可以爲每個客戶檢索訂單總數。例如:

<property name="totalOrders" insert="false" update="false"> 
    <formula>(select sum(ORDER.TOTAL) from ORDER where ORDER.FK_CUSTOMER=ID)</formula> 
</property> 

在這種情況下,我們設置插入=「假」,更新=「假」,因爲這顯然是一個衍生的結果,我們不能直接對其進行更新。

表現?這不是關於性能 - 而是關於你的數據庫映射需求。

+0

我該如何做一套? – PhantomReference 2017-04-21 09:56:28