Ich habe ein Problem kaskadieren die persistente Operation auf Kinder.JPA/Ruhezustand kaskadieren persist funktioniert nicht
Ich habe eine Eltern und eine Kind Klasse. Als ich das Elternteil mit einem Kind mit einem Feder Data Repository die Werte des Kindes zu speichern sind all null oder 0
Wenn ich CascadeType.ALL zur OneToMany-Annotation hinzufügen bekomme ich diesen Fehler: „mehr Darstellungen von derselben Einheit verschmolzen werden“
@Entity
@Getter
@Setter
public class TestParent {
@Id
@GeneratedValue
private Long id;
@OneToMany(mappedBy = "parent", cascade = {CascadeType.DETACH, CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.REMOVE}, orphanRemoval = true)
private List<TestChild> children;
}
@Entity
@Getter
@Setter
public class TestChild {
@Id
@GeneratedValue
private Long id;
private int value;
@ManyToOne
private TestParent parent;
}
Hier ist der Code zu testen, ob das Speichern der Objekte arbeiten:
@Test
@Transactional
public void test123(){
TestParent parent = new TestParent();
parent = testRepo.save(parent);
TestChild child1 = new TestChild();
child1.setValue(3);
child1.setParent(parent);
parent.setChildren(new ArrayList<>());
parent.getChildren().add(child1);
parent = testRepo.save(parent);
assertThat(parent.getChildren().size()).isNotZero();
assertThat(parent.getChildren().get(0).getValue()).isEqualTo(3);
}
Also mein Ansatz ist ohne den Persist zu beheben Kaskadierung dding die cascadeType Merge. Irgendwelche Hinweise, was ich falsch mache?
Dann speichern Sie nicht die Eltern. Der zweite Speichervorgang ist ein Update und somit eine Zusammenführung. Eine Persistenz ist nur für neue nicht persistente Instanzen gültig. Außerdem zerstören Sie die verwaltete Sammlung, indem Sie vor dem Hinzufügen des untergeordneten Objekts eine 'neue ArrayList()' ausführen. Imho Ihr Code ist in mehrfacher Hinsicht fehlerhaft. –