簡體   English   中英

休眠保存復雜實體

[英]Hibernate Saving complex entity

我有一個相對復雜的實體。 像這樣:

@Entity
public class MyEntity {

/// some fields
///...

@OneToMany(/*cascade = CascadeType.ALL, */fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
@Cascade({CascadeType.ALL})
protected Set<ParameterValue> parameterValues 

//...
}

@Entity
public class ParameterValue {

// ...
 @ManyToOne(fetch = FetchType.EAGER)
 @Cascade({org.hibernate.annotations.CascadeType.MERGE,     org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.REFRESH})
 private Parameter  parameter

}

MyEntity具有字符串ID,ParameterValue已生成長ID,並且參數具有字符串ID

我的實體具有參數值,每個參數值都有參數,這些值在不同實體的其他參數值之間共享

參數是具有不同實現的抽象類

我的問題是,當我為此類對象調用休眠會話saveOrUpdate時1)它非常慢2)有時我收到org.hibernate.NonUniqueObjectException:具有相同標識符值的另一個對象已與該會話相關聯:[com.xxx。 Entitys.content.EnumParameter#-1672482954]

保存/更新此類實體的正確方法是什么?

我繼承了以前的開發人員的架構,因此如果需要簡化保存,可以對其進行更改

好的,過渡到數據庫中適當的主鍵(唯一,索引)的long唯一ID可以大大加快更新速度。

根據您要更新的內容,擺脫急切的獲取是加快處理速度的另一種方法-也許您只需要更新某些MyEntity ParamValue 僅檢索該ParamValue並在修改ParamValue其存儲( select p from ParamValue p where p.entity=:entity )。

這實際上取決於您的代碼實際執行的操作,但是這兩件事(延遲加載和適當的唯一鍵)將加快速度-盡管延遲加載可能需要查看一些代碼。

暫無
暫無

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

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