2013-11-15 28 views
1

正如我們所知,Hibernate有一個非常好的功能SaveOrUpdate當我們傳遞任何對象到這個方法它知道數據將是update或新的記錄將被添加到數據庫中。此功能是否也可在JOOQ或在我的代碼中,我必須處理這個?JOOQ VS休眠行爲

回答

4

jOOQ也一樣。如果更改記錄的主鍵,則它將使用INSERT,否則將使用UPDATE

事實上,當您從數據庫中讀取記錄時,調用store()將如您所期望的那樣觸發UPDATE。如果你創建一個新的記錄,那麼它將會是INSERT ed。

對於2.6來說,克隆一個記錄然後讓jOOQ去更新它是有點困難的(因爲克隆會在新的實例中設置主鍵,因此將它標記爲「new」 - > insert)。

+0

不,我的意思是'店()'方法不會塔一樣'saveOrUpdate()方法' –

+0

正是你所說的 「燒更新()」 是什麼意思? –

+0

我想射擊更新()查詢 – 2013-11-15 15:53:41

1

如果您從數據庫中讀取記錄並調用record.store(),您將擁有與hibernate saveOrUpdate方法相同的行爲,它完美地工作!

但在絕大多數情況下,您不會從數據庫中讀取記錄,您將從控制器或視圖接收記錄,例如,在這種情況下,record.store()方法不會更新,它始終插入即使你有id設置。

現在我正在執行我自己的saveOrUpdate,通過記錄ID進行檢查。

public int saveOrUpdate(Record record) { 
    if(record.getId() != null) { 
     return record.update(); 
    } 
    return record.store();  
}