Ich versteh das irgendwie immernoch nicht so richtig.
Also, ich hab 2 Tabellen mit einer m-n Beziehung und eine Verknüpungstabelle mit einer eigenen Klasse.
In der hab ich an den 2 Beziehungen, den Cascade-Typ auf PERSIST gesetzt. Darunter verstehe ich, dass er beim persistieren die beiden anderen Objekte auch speichert (falls noch nicht vorhanden?). Das funktioniert aber so bei mir nicht. Ich kann ja mal etwas Code posten:
aus der Verknüpfungstabelle:
aus der einen Tabellen (Paragraph):
aus der 2. Tabelle (UnmodifiedTExt):
und hier dann der Test:
Ich würde denken, dass es so funktionieren würde, tut es aber nicht. Er sagt dann immer, dass er null in die Verknüpfungstabelle eintragen würde und das nicht geht.
Wenn ich das Auskommentierte einkommentiere funktioniert es. Aber wieso geht das mit dieser Cascade nicht? ODer versteh ich das falsch?
Danke schonmal,
GG
Also, ich hab 2 Tabellen mit einer m-n Beziehung und eine Verknüpungstabelle mit einer eigenen Klasse.
In der hab ich an den 2 Beziehungen, den Cascade-Typ auf PERSIST gesetzt. Darunter verstehe ich, dass er beim persistieren die beiden anderen Objekte auch speichert (falls noch nicht vorhanden?). Das funktioniert aber so bei mir nicht. Ich kann ja mal etwas Code posten:
aus der Verknüpfungstabelle:
Code:
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "unmodifiedText",insertable = false, updatable = false)
private UnmodifiedText unmodifiedText;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "paragraph",insertable = false, updatable = false)
private Paragraph paragraph;
aus der einen Tabellen (Paragraph):
Code:
@OneToMany(mappedBy = "paragraph")
public Set<UnmodifiedText_Paragraph> getUtp() {
return utp;
}
public void setUtp(Set<UnmodifiedText_Paragraph> utp) {
this.utp = utp;
}
public UnmodifiedText_Paragraph addUnmodifiedText(Integer pos, UnmodifiedText text){
UnmodifiedText_Paragraph utp = new UnmodifiedText_Paragraph(this, pos, text);
this.getUtp().add(utp);
text.getUtp().add(utp);
return utp;
}
aus der 2. Tabelle (UnmodifiedTExt):
Code:
@OneToMany(mappedBy = "unmodifiedText")
public Set<UnmodifiedText_Paragraph> getUtp() {
return utp;
}
public void setUtp(Set<UnmodifiedText_Paragraph> utp) {
this.utp = utp;
}
public UnmodifiedText_Paragraph addParagraph(Integer pos, Paragraph paragraph){
UnmodifiedText_Paragraph utp = new UnmodifiedText_Paragraph(paragraph, pos, this);
this.getUtp().add(utp);
paragraph.getUtp().add(utp);
return utp;
}
und hier dann der Test:
Code:
DaoFactory factory = DaoFactory.instance(DaoFactory.HIBERNATE);
//paragraphDao = factory.getParagraphDao();
//paragraphDao.begin();
//unmodTextDao = factory.getUnmodifiedTextDao();
//unmodTextDao.begin();
utpd = factory.getUnmodifiedText_ParagraphDao();
utpd.begin();
Paragraph p = new Paragraph();
p.setText("noch meeeeeehr Text. Bald ist Wochenende!");
UnmodifiedText unmodText = new UnmodifiedText();
unmodText.setText("aber erst noch Mittag!");
// paragraphDao.save(p);
// Long id = unmodTextDao.save(unmodText);
UnmodifiedText_Paragraph utp = unmodText.addParagraph(1, p);
utpd.save(utp);
// if (paragraphDao.getSession().isOpen()) {
// paragraphDao.commit();
// }
// if (unmodTextDao.getSession().isOpen()) {
// unmodTextDao.commit();
// }
if (utpd.getSession().isOpen()) {
utpd.commit();
}
Ich würde denken, dass es so funktionieren würde, tut es aber nicht. Er sagt dann immer, dass er null in die Verknüpfungstabelle eintragen würde und das nicht geht.
Wenn ich das Auskommentierte einkommentiere funktioniert es. Aber wieso geht das mit dieser Cascade nicht? ODer versteh ich das falsch?
Danke schonmal,
GG