[英]Hibernate save is doing update
在這里,我正在開發一個需要在表中插入新審計記錄的項目。 (例如new_vale vs old_value),需要更新幾個字段。
問題我試着解決:
session.save()不執行“INSERT” ,而是執行“UPDATE” 。
private void updateCollabPoApprovaForASN(CollabPoApprovalKey key, PurchaseOrderUpdateASN updateAsn){
CollabPoApproval collabPoApproval = this.collabPoApprovalGateway.findById(key);
compareAndSetChangedValue(updateAsn, collabPoApproval);
key.setChangeId(generateId());
collabPoApproval.setKey(key);
this.collabPoApprovalGateway.save(collabPoApproval);
}
基本上,我所做的是,我使用hibernate查詢來獲取現有記錄,然后通過手動設置ID來修改主鍵,並更新這些成員審計字段。 最后,將其保存回數據庫。
SQL生成:
update CollabPoApproval set OLD_DRAWING_NUMBER=?, NEW_DRAWING_NUMBER=? ... where ID=? and SU_ID=? and PO=? and LINE=?
表背景 :
ID不是自動增量字段,它是手動生成的ID,基本上它是TimeStamp+[0-999]
的組合(例如20150412113637011
),所以我必須在保存之前手動設置它。
表的主鍵是4個字段的組合,包括ID,它們都是整數。除此之外,它還包括幾十個其他審計字段,我只關心一些。
我試過的東西不起作用:
Google / StackOverFlow搜索並嘗試了不同的方法。
1
添加以下生成器(我相信這是默認的):
<generator class="assigned" />
所以hbm composit-id如下:
<composite-id class="CollabPoApprovalKey" name="key">
<key-property name="Id" column="ID" type="long" />
<key-property name="suId" column="SU_ID" type="integer" />
<key-property name="po" column="PO" type="integer" />
<key-property name="line" column="LINE" type="short" />
<generator class="assigned" />
</composite-id>
第2
嘗試使用此方法save(String entityName, Object object)
this.collabPoApprovalGateway.save("CollabPoApproval",CollabPoApproval)
不工作
第3
Trid使用此方法saveOrUpdate(Object object)
還是不行。
如果要插入新記錄,則創建CollabPoApproval類型的新對象,並從所選對象復制值而不是修改它。 Hibernate查看對象的引用,在這種情況下,引用不會改變為什么它會觸發update語句而不是insert。
CollabPoApproval collabPoApproval = this.collabPoApprovalGateway.findById(key);
CollabPoApproval collabPoApprovalNew = new CollabPoApproval ();
//copy collabPoApproval values to collabPoApprovalNew
//do other modification
this.collabPoApprovalGateway.save(collabPoApprovalNew );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.