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