簡體   English   中英

使用Hibernate和WebService反序列化后,無法保留圖形列表

[英]Unable to persist lists of a graph after deserializing, using hibernate and webservices

我有兩個名為Xapp Xdbase的應用程序服務器和2個數據庫服務器-Yapp Ydabse。 在Xapp和Yapp上使用休眠模式。 我需要通過Web服務同步數據。 用一個簡單的對象圖

@Entity
@Table(name="A_table")
public class A extends PersistentObject 
{
    @Column(name="user")
    private String user;

    @ElementCollection()
    @Enumerated(EnumType.STRING)
    @Column(name="b_column")
    @CollectionTable(name="B_table")
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<B> bList= new Arralist<B>();


    /* Here comes getter and setter for user and bList */
}

public enum B {
    One,Two,Three
}

PersistentObject是可序列化的,並且具有樣板代碼。

XApp和YApp具有這些類。

我在XApp上創建了一個新的A對象(命名為Ainstance),其中包含一個包含兩個B對象的B列表。 對A進行反序列化,然后使用Yapp上的Web服務將其發送到Yapp。 在Yapp,我反序列化傳入的A並使用存儲庫repo.saveOrUpdate(Ainstance); 一切都很好。 Ydbase中的B_table有2條記錄。

然后在XApp上使用舊的Ainstance,將新的B添加到列表中並更改用戶。 然后再次發送A。 它使用bList中的3個B記錄在Yapp上完美地反序列化。 但是,當調用repo.saveOrUpdate(Ainstance)時,用戶更改將應用​​於dbase,但B_table有2條記錄。 沒有錯誤,沒事。

我嘗試合並Ainstance @YApp,然后更新卻沒有運氣。 列表有什么問題? 我嘗試了一個帶有類類型的列表,但它們也沒有持久化。 怎么了

經過一番閱讀之后,發現答案是“重復”。

當您需要保存具有給定標識符的實體時,盡管實際上已配置了該實體的標識符,但打算使用copy()代替save()/ persist()。

當某些實體(可能來自外部系統)具有預先存在的標識符,而其他相同類型的實體需要生成其標識符時,這很有用。

說axtavt,// @ 休眠:刷新,逐出, 復制並刷新

暫無
暫無

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

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