我一直在这里观察这个异常,但我找不到解决方案,所以我想只是粘贴我的代码,以防有什么问题。当我尝试查找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;发布于 2015-05-23 00:50:03
我已经解决了这个问题,用下面这样的代码替换了我的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);
}发布于 2014-06-18 00:16:19
我发现在处理@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‘是’criteria‘的复数,所以你的类名应该是EvaluationSelectionCriterion,集合名应该是evaluationSelectionCriteria。
https://stackoverflow.com/questions/24266134
复制相似问题