繁体   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