簡體   English   中英

Hibernate save正在進行更新

[英]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.

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