2014-03-06 33 views
0

我問了一個類似的question here,但現在我縮小了這個問題。休眠似乎沒有看到反序列化對象上的變化

所以總結一下:我有Person對象與幾個電話號碼被保存並保存到數據庫。

好。然後我對一些電話號碼進行了更改,將整個Person對象序列化,通過jms發送給一些後端服務,將其反序列化並保存。 看來,由於序列化 - 反序列化,PhoneNumbers集上的更改不會被Hibernate拾起。

class Person 
{ 
    @OneToMany(mappedBy = "person", cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}) 
    @Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN,org.hibernate.annotations.CascadeType.SAVE_UPDATE}) 
private Set<PhoneNumber> phoneNumbers = new HashSet<PhoneNumber>(); 

//.... omitted .... 
} 

class PhoneNumber 
{  
    @ManyToOne(optional = false) 
    private Person person; 

    //... omitted ... 
} 

回答

0

我相信這是預期的。當您序列化對象並通過JMS發送它時,您可能會繞過Hibernate創建的代理,而直接與您的類一起工作。同樣,通過JMS移動對象會將其發送到JPA的上下文之外,因此無法再跟蹤該實體。

你可以做一個提取,合併刷新對象。我不能說我建議以這種方式處理實體。