Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate将重复项插入到一对多集合中-即时获取_Java_Hibernate - Fatal编程技术网

Java Hibernate将重复项插入到一对多集合中-即时获取

Java Hibernate将重复项插入到一对多集合中-即时获取,java,hibernate,Java,Hibernate,我有两个类,monitoringExpression和reportTrigger,具有一对多关系。Hibernate正在尝试从monitoringExpression类持有的集合中保留重复的reportTriggers。向reportTrigger集合中的第一次插入可以工作,但随后的插入会因唯一的约束冲突而失败,因为hibernate尝试将同一个reportTrigger持久化两次。这与已知的hibernate bug()非常相似;但是,在本例中,我们没有使用惰性集合。以下是相关代码: Moni

我有两个类,monitoringExpression和reportTrigger,具有一对多关系。Hibernate正在尝试从monitoringExpression类持有的集合中保留重复的reportTriggers。向reportTrigger集合中的第一次插入可以工作,但随后的插入会因唯一的约束冲突而失败,因为hibernate尝试将同一个reportTrigger持久化两次。这与已知的hibernate bug()非常相似;但是,在本例中,我们没有使用惰性集合。以下是相关代码:

MonitoringExpression.Class

@Audited
@Entity
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class MonitoringExpression extends GeneratedIdXmlObject{

private String name;
private DeterminantDefinition determinantDefinition;
private String valueExpression;
private String testExpression;
private String messageExpression;
private String messageSeverity;
private boolean setExitStatusWhenTrue;
protected SortedSet<MonitoringExpressionAttribute> attributes = new TreeSet<MonitoringExpressionAttribute>();
private String color;

private Set<ReportTrigger> reportTriggers = new HashSet<ReportTrigger>();               

.
.
.

@OneToMany(mappedBy="monitoringExpression",orphanRemoval=true,cascade={CascadeType.ALL},fetch=FetchType.EAGER)
@Sort(type=SortType.NATURAL)
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public SortedSet<MonitoringExpressionAttribute> getAttributes() {
    return attributes;
}
public void setAttributes(SortedSet<MonitoringExpressionAttribute> attributes) {
    this.attributes = attributes;
}
@Audited
@Table(name="ReportTrigger")
@Entity
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class ReportTrigger extends GeneratedIdXmlObject{

private String name;
private String description;
private TriggerableReport report;
private Frequency burstPeriodSize;
private String periodStartExpression;
private String periodEndExpression;
private Set<ReportTriggerParameterMapping> parameterMappings = new HashSet<ReportTriggerParameterMapping>();    
private MonitoringExpression monitoringExpression;

@XmlIDREF
@ManyToOne
@Audited
@GraphProcessorOverride(process=false,recurse=false)
@NaturalId(mutable=true)
public TriggerableReport getReport() {
    return report;
}
public void setReport(TriggerableReport report) {
    this.report = report;
}

@Embedded
public Frequency getBurstPeriodSize() {
    return burstPeriodSize;
}
public void setBurstPeriodSize(Frequency burstPeriodSize) {
    this.burstPeriodSize = burstPeriodSize;
}

@Audited
@OneToMany(mappedBy="reportTrigger",orphanRemoval=true,cascade={CascadeType.ALL})
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public Set<ReportTriggerParameterMapping> getParameterMappings() {
    return parameterMappings;
}

.
.
.

@XmlIDREF
@ManyToOne
@GraphProcessorOverride(process=false,recurse=false)
@NaturalId(mutable=true)
public MonitoringExpression getMonitoringExpression() {
    return monitoringExpression;
}
public void setMonitoringExpression(MonitoringExpression monitoringExpression) {
    this.monitoringExpression = monitoringExpression;
}
@已审核
@实体
@缓存(用法=缓存并发策略。非严格读写)
公共类MonitoringExpression扩展GeneratedXmlObject{
私有字符串名称;
私人决定因素定义;
私有字符串值表达式;
私有字符串测试表达式;
私有字符串表达式;
私有字符串消息严重性;
私有布尔集合exitstatuswhentrue;
受保护的分类集属性=新树集();
私有字符串颜色;
private Set reportTriggers=new HashSet();
.
.
.
@OneToMany(mappedBy=“monitoringExpression”,orphanRemoving=true,cascade={CascadeType.ALL},fetch=FetchType.EAGER)
@排序(type=SortType.NATURAL)
@缓存(用法=缓存并发策略。非严格读写)
公共分类集getAttributes(){
返回属性;
}
公共void集合属性(SortedSet属性){
this.attributes=属性;
}
ReportTrigger.Class

@Audited
@Entity
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class MonitoringExpression extends GeneratedIdXmlObject{

private String name;
private DeterminantDefinition determinantDefinition;
private String valueExpression;
private String testExpression;
private String messageExpression;
private String messageSeverity;
private boolean setExitStatusWhenTrue;
protected SortedSet<MonitoringExpressionAttribute> attributes = new TreeSet<MonitoringExpressionAttribute>();
private String color;

private Set<ReportTrigger> reportTriggers = new HashSet<ReportTrigger>();               

.
.
.

@OneToMany(mappedBy="monitoringExpression",orphanRemoval=true,cascade={CascadeType.ALL},fetch=FetchType.EAGER)
@Sort(type=SortType.NATURAL)
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public SortedSet<MonitoringExpressionAttribute> getAttributes() {
    return attributes;
}
public void setAttributes(SortedSet<MonitoringExpressionAttribute> attributes) {
    this.attributes = attributes;
}
@Audited
@Table(name="ReportTrigger")
@Entity
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class ReportTrigger extends GeneratedIdXmlObject{

private String name;
private String description;
private TriggerableReport report;
private Frequency burstPeriodSize;
private String periodStartExpression;
private String periodEndExpression;
private Set<ReportTriggerParameterMapping> parameterMappings = new HashSet<ReportTriggerParameterMapping>();    
private MonitoringExpression monitoringExpression;

@XmlIDREF
@ManyToOne
@Audited
@GraphProcessorOverride(process=false,recurse=false)
@NaturalId(mutable=true)
public TriggerableReport getReport() {
    return report;
}
public void setReport(TriggerableReport report) {
    this.report = report;
}

@Embedded
public Frequency getBurstPeriodSize() {
    return burstPeriodSize;
}
public void setBurstPeriodSize(Frequency burstPeriodSize) {
    this.burstPeriodSize = burstPeriodSize;
}

@Audited
@OneToMany(mappedBy="reportTrigger",orphanRemoval=true,cascade={CascadeType.ALL})
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public Set<ReportTriggerParameterMapping> getParameterMappings() {
    return parameterMappings;
}

.
.
.

@XmlIDREF
@ManyToOne
@GraphProcessorOverride(process=false,recurse=false)
@NaturalId(mutable=true)
public MonitoringExpression getMonitoringExpression() {
    return monitoringExpression;
}
public void setMonitoringExpression(MonitoringExpression monitoringExpression) {
    this.monitoringExpression = monitoringExpression;
}
@已审核
@表(name=“ReportTrigger”)
@实体
@缓存(用法=缓存并发策略。非严格读写)
公共类ReportTrigger扩展了GeneratedXmlObject{
私有字符串名称;
私有字符串描述;
私人报告;
专用频率脉冲周期化;
私有字符串周期startexpression;
私有字符串periodEndExpression;
私有集参数appings=new HashSet();
私有监视表达式监视表达式;
@XmlIDREF
@许多酮
@审计
@GraphProcessorOverride(进程=false,递归=false)
@NaturalId(可变=真)
公共TriggerableReport getReport(){
返回报告;
}
公共无效集合报告(TriggerableReport){
this.report=报告;
}
@嵌入
公共频率getBurstPeriodSize(){
返回burstperiodize;
}
公共无效设置burstPeriodSize(频率burstPeriodSize){
this.burstPeriodSize=burstPeriodSize;
}
@审计
@OneToMany(mappedBy=“reportTrigger”,orphanRemoving=true,cascade={CascadeType.ALL})
@缓存(用法=缓存并发策略。非严格读写)
公共集getParameterMappings(){
返回参数应用程序;
}
.
.
.
@XmlIDREF
@许多酮
@GraphProcessorOverride(进程=false,递归=false)
@NaturalId(可变=真)
公共监视表达式getMonitoringExpression(){
返回监视表达式;
}
public void setMonitoringExpression(MonitoringExpression MonitoringExpression){
this.monitoringExpression=monitoringExpression;
}
据我所知,我们没有对reportTrigger集合做任何不寻常的事情(显然我们不能在一个集合中添加两次相同的跳跳虎)。有人看到过这样的事情吗?谢谢

休眠3.6.10


Java 8

我认为可以进行如下检查
-检查您在哪个字段上得到的唯一约束冲突错误?它可以在主键列上,也可以在任何唯一列上。

-如果主键存在冲突,则当集合为集合时,它可以是两个不同的TriggerableReport,但共享相同的键值。

我认为可以执行以下检查
-检查您在哪个字段上得到的唯一约束冲突错误?它可以在主键列上,也可以在任何唯一列上。
-如果主键存在冲突,则当集合为集合时,它可以是2个不同的TriggerableReport,但共享相同的键值