In my code, I have (don’t worry about business logic, it’s an example) Agreggate School:
class Document {
@OneToMany(cascade = CascadeType.All)
private List<Field> Field;
@OneToMany
private List<Rule> Rule;
//getters and setters omitted by brevity
}
class Rule {
@ManyToOne(fetch = FetchType.Lazy)
@JoinColumn("field_origin_id", referencedColumnName="id")
private Field fieldOrigin;
@ManyToOne(fetch = FetchType.Lazy)
@JoinColumn("field_target_id", referencedColumnName="id")
private Field fieldTarget;
private Integer operator;
private Integer agregator;
//getters and setters omitted by brevity
}
class Field {
@OneToMany(mappedBy = "fieldOrigin", cascade = CascadeType.All)
private List<Rule> rulesThatHaveThisAsOrigin;
@OneToMany(mappedBy = "fieldTarget", cascade = CascadeType.All)
private List<Rule> rulesThatHaveThisAsTarget;
// getter setters
public void addRuleThatHasOriginHere(Rule rule) {
rulesThatHaveThisAsOrigin.add(rule);
rule.setOrigin(this);
}
public void addRuleThatHasTargetHere(Rule rule) {
rulesThatHaveThisAsTarget.add(rule);
rule.setTarget(this);
}
}
when I make something like
Document doc = new Document();
Field f1 = new Field();
Field f2 = new Field();
Rule r1 = new Rule();
f1.addRuleThatHasOriginHere(r1);
f2.addRuleThatHasTargetHere(r1);
Hibernate throws a JpaObjectNotFoundException for f2 or f1 because cascade Doc -> f1 -> r1 and f2 or f1 is not saved yet.
How can I control this? In my mind Hibernate should be smart enough to do in the right order, but I think something is wrong with my annotations.
Solve it, understand error.
New contributor
Luis Antonio Momm Duarte is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.