级联= 不再引用"all-delete- orphan"



我一直在这里观察这个异常,但我找不到解决方案,所以我想只是粘贴我的代码,以防万一有什么问题。当我试图找到EvaluationSelectionCriteria实体时,我收到了这个异常。

Exception: org.hibernate.HibernateException: A collection with cascade="all-delete-      orphan" was no longer referenced by the owning entity instance: com.greenvalley.etendering.domain.Candidacy.evaluationSelectionCriterias 

 @OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
@JoinColumn(name = "candidacy_id", nullable = false)
@XmlElement
@JsonIgnore
@Getter
@Setter
private List<EvaluationSelectionCriteria> evaluationSelectionCriterias = new ArrayList<>();

@ManyToOne
@JoinColumn(name = "candidacy_id", nullable = false, insertable = false, updatable = false)
@XmlTransient
@Getter
@Setter
private Candidacy candidacy;

我已经解决了这个问题,通过替换我的setXX方法像这样

public void setEvaluationSelectionCriterias(List<EvaluationSelectionCriteria> evaluationSelectionCriterias) {
if(this.evaluationSelectionCriterias == null) { //if not already initialized
  this.evaluationSelectionCriterias = evaluationSelectionCriterias;
} else {
  this.evaluationSelectionCriterias.clear();
  this.evaluationSelectionCriterias.addAll(evaluationSelectionCriterias);
}

我发现,当处理@ManyToOne关系时,@JoinTable似乎比单独处理@JoinColumn更好。试试这样做:

@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
@JoinTable(
   name="candidacy_evaluation_search_criteria",
   joinColumns={ @JoinColumn(name="evaluation_selection_criteria", referencedColumnName="id") },
   inverseJoinColumns={ @JoinColumn(name="candidacy", referencedColumnName="id", unique=true) })
@XmlElement
@JsonIgnore
@Getter
@Setter
private List<EvaluationSelectionCriteria> evaluationSelectionCriterias = new ArrayList<>();

@ManyToOne(mappedBy = "evaluationSelectionCriterias")
@XmlTransient
@Getter
@Setter
private Candidacy candidacy;

作为旁注,'criteria'是'criterion'的复数形式,所以你的类名应该是EvaluationSelectionCriterion,集合名应该是evaluationSelectionCriteria

相关内容

最新更新