Ich implementiere ein OneToMany-Association (Cascade.ALL).
[LayoutElem] one----many [LayoutLabelElem]
Wenn ich den FK (layoutId) in der "many"-Klasse nicht anführe wird er trotzdem inkl. Constraint in der Datenbank erstellt.
Beim speichern der "one"-Klasse mit bleibt in der "many"-Tabelle die Spalte layoutid nicht gesetzt, was dem SQL-output entspricht:
Code:
Hibernate: insert into LayoutLabelElem (name, TYPE, id) values (?, 'at.onlinegroup.charta.elem.LayoutLabelElem', null)
Da ich im Tutorial
http://www.hibernate.org/hib_docs/v3/reference/en/html_single/#example-parentchildkeinen Hinweis auf ein explizites setzen des FK gefunden habe, nehme ich an das Hibernate3 es unterstützt (richig?).
Mir unklar warum in meinem Fall der FK nicht gestzt wird.
Ich bitte um Hilfe oder einen Verweis zur entsprechenden Doku.
Vielen Dank
Hibernate version: 3.1.2 Mapping documents:LayoutElem.class
Code:
@Entity
@Table(name="layout")
public class LayoutElem {
private int layoutId;
private String name;
private Map<String, LayoutLabelElem> labels;
...
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getLayoutId() { return layoutId; }
...
@OneToMany(mappedBy="layoutId", cascade = CascadeType.ALL)
@MapKey
@JoinColumn(name="layoutId")
@OnDelete(action=OnDeleteAction.CASCADE)
public Map<String,LayoutLabelElem> getLabels() { return labels; }
...
LayoutLabelElem.class
Code:
@Entity
@Table(name="layoutlabel")
public class LayoutLabelElem {
private int id;
//public int layoutId;
public double x = 0;
public double y = 0;
public String fontName = "";
...
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getId() { return id; }
...
Name and version of the database you are using:
hsqldb 1.8.0