Hi !
Ich habe ein Mapping-Problem mit Hibernate3. Ich habe eine Entity-Klasse die sich "Knot" nennt, für eine Implementierung des Composite-Patterns. Knot stellt einen Knoten dar, welcher mehrfache Knoten enhalten kann, einen Vater-Knoten besitzt usw. Im prinzip wird dadurch eine Struktur für einen JTree aufgebaut. In meinem Bsp enthält so ein Knoten auch verschiedene Bilderalben.
Mein Problem besteht nun darin, eine beziehung zwischen einem Knoten, der beliebig viele Unterknotenbesitzen kann, herzustellen.
Code:
@Entity
@Table(name = "KNOTS")
@org.hibernate.annotations.Entity(optimisticLock = org.hibernate.annotations.OptimisticLockType.ALL, dynamicInsert = true, dynamicUpdate = true)
public class Knot implements Serializable, TreeElement {
@Id
@Column(name="KNOT_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private int id ;
@OneToMany(mappedBy = "parent", cascade={CascadeType.ALL})
@JoinTable(name = "ALBUMS_KNOT", joinColumns = { @JoinColumn(name = "ALBUM_ID") }, inverseJoinColumns = { @JoinColumn(name = "KNOT_ID") })
/** Liste an Alben die der Knoten beinhaltet */
private List<Album> albums = new Vector<Album>();
@OneToMany(cascade = { CascadeType.PERSIST,
CascadeType.MERGE})
@JoinTable(name = "KNOT_KNOTS", joinColumns = { @JoinColumn(name = "KNOT_ID") }, inverseJoinColumns = { @JoinColumn(name = "KNOT2_ID") })
/** Liste an Knoten die der Knoten beinhaltet */
private List<Knot> knots = new Vector<Knot>();
@ManyToOne(cascade={CascadeType.MERGE,
CascadeType.PERSIST, CascadeType.REFRESH})
/** Übergeordneter Knoten */
private Knot parent = null;
/** Name des Knoten */
private String name;
@Version
private int version = 0;
// ..........
Auf diese Art des Mappings wie ich es hier habe, funktioniert die Persistierung auf die Oracle-DB wunderbar. Das problem besteht aber beim Löschen einzelner Datensätze. Entweder bekomm ich einen LONG DATATYPE ORACLE-Error und kann keine Datensätze löschen, oder wenn ich leere Alben aus einem Knoten löschen will, werden ALLE knoten von der DB gelöscht.
Wo ist mein Mapping-Fehler? SIeht den jemand?
Bin für jegliche Hilfe dankbar,
mfg Prophecy