2012-05-24 56 views
2

如下修改的集合,使髒實體我有一個實體定義

@Entity(name = "Report") 
@Table(name = "REPORTS") 
@org.hibernate.annotations.Entity(dynamicInsert = true, dynamicUpdate = true, selectBeforeUpdate = true) 
public class Report implements java.io.Serializable  { 

    /* other fields, getters and setters*/ 
    @Column(name = "UPD_TIMESTAMP") 
    @Version 
    private Long updTimestamp; 

    @OneToMany(mappedBy = "report", fetch = FetchType.LAZY) 
    private Collection<ReportItem> reportItems = new ArrayList<ReportItem>(); 

    public Collection<ReportItem> getReportItems() { 
     return reportItems; 
    } 

    public void setReportItems(Collection<ReportItems> reportItems) { 
     this.reportItems = reportItems; 
    } 
} 

的問題是,當我修改reportItems東西,報告實體變得骯髒不堪,總有一個遞增的版本的更新只有字段。

我知道鄰@PoptimisticLock(排除=真),但我堅持休眠3.2.0 GA和此註釋不可用。 有什麼解決方法可以使用Hibernate 3.20 GA這個功能嗎?

+0

嘗試從上下文中刪除對象? – JMelnik

+0

我不確切地知道'dirty'是什麼意思,但如果這些對象不同步,那麼您不能指責JPA。該應用程序負責保持同步。 – siebz0r

+0

@ siebz0r我的意思是,即使只有來自reportItems集合的項目修改,hibernate認爲Report實體被修改並進行更新。但更新僅修改版本字段。 – tibtof

回答

1

看看逆關鍵字,也許這可以提供一個解決方案。它解釋了這個Here

編輯:原來這是預期的行爲。 See this question

+0

謝謝,@ siebz0r!我沒有爲'Report'和'ReportItem'之間的關係定義任何級聯,並且我們剛剛更新到Hibernate 3.6,並且'@OptimisticLock(excluded = true)'註釋都可以正常工作,所以我沒有時間測試你的解決方案。但它看起來像我在找什麼,所以我會接受你的答案。 – tibtof

相關問題