2010-03-03 4 views
5

Wir verwenden Hibernate Annotations 3.4.0GA und Hibernate Core-3.3.2.GA (auch als die aktuellen stabilen Versionen bekannt) für eine Oracle-DatenbankWert von 0 in Hibernate IndexColumn abgebildet mit Basis = 1

Wir haben ein Eins-zu-Viele-Mapping mit base = 1, das lange funktionierte, aber letzte Woche haben wir einige Einträge in der Datenbank gefunden, wo die Indexspalte einen Wert von 0 enthielt, der alle Arten von Problemen verursachte.

Also meine Frage ist: Weiß jemand eine Möglichkeit, einen Wert von 0 in die Indexspalte einer Eins-zu-viele-Beziehung zu erhalten, wenn es mit einer Basis = 1 zugeordnet ist? Möglicherweise verwandt mit der Verwendung Generics oder MappedSuperclass.

Beachten Sie, dass der Code ziemlich komplex ist, weil auch die Vererbung beteiligt ist.

Nachfolgend sind die relevanten Teile der Klassen:

// SuperClass of the One side 
@MappedSuperclass 
public abstract class AbstractReihung<Tp, Tw, Te extends AbstractReihungElement<Tp, Tw>> 
{ 
    @OneToMany(cascade = CascadeType.ALL) 
    @Cascade(
    { 
     org.hibernate.annotations.CascadeType.ALL, 
     org.hibernate.annotations.CascadeType.DELETE_ORPHAN 
    }) 
    @JoinColumn(name = "parent_id", nullable = false) 
    @IndexColumn(name = "position", base = 1, nullable = false) 
    private List<Te> elements = new ArrayList<Te>(); 
} 

// Super Class of the Many side 
@MappedSuperclass 
public abstract class AbstractReihungElement<Tp, Tw> extends AbstractDbObject 
{ 
    @ManyToOne 
    @JoinColumn(name = "parent_id", insertable = false, updatable = false, nullable = false) 
    private Tp parent; 

    @Column(name = "position", insertable = false, updatable = false, nullable = false) 
    private int position; 
} 

Die tatsächlichen Klassen von diesen erben und konkreten Klassen für die Typparameter bereitzustellen. Sie sind als Entity abgebildet. Sie geben auch ID- und Versionsspalten sowie viele andere Attribute und Referenzen an, aber nichts, was mit der vorliegenden Zuordnung zu tun hat.

+0

Hallo Jens, ich stehe vor dem gleichen Szenario, das du beschrieben hast, bis zuletzt hast du herausgefunden, wie dieses Problem passiert, oder hast du eine Lösung dafür gefunden ?, Das ist mein Code dafür, http: // Pastebin. com/V6FRBLME – fujy

+0

Ich habe nie mehr darüber herausgefunden, als was in dieser Frage und Kommentare beschrieben wird. –

Antwort

2

Ich weiß, es ist fast zwei Jahre her, aber ich stolperte darüber, während ich eine Lösung für das gleiche Problem suchte. Wir verwenden hbm über XML-Dateien, daher bin ich mir nicht sicher, ob das helfen wird. In unserem Fall war das Problem das Reverse Mapping. Wenn das Steuerelement über die Liste (und den Index) auf der Listenelementseite (die "vielen") wie in Ihrem Fall war, hatten wir das Problem. Das Verschieben hat das gelöst. Ich weiß nicht, wie das mit Annotationen gemacht wird.

Eine andere Quelle für den Fehler kann sein, wenn Sie "elements" auf Ihrem AbstractReihung-Objekt setzen. Hibernate verwendet Proxy-Objekte für Lazy-geladene Eigenschaften. Wenn Sie eine neue Sammlung erstellen, anstatt die vorhandene zu ändern, überschreiben Sie das Proxy-Objekt.

+0

Ich akzeptierte die Antwort, weil sie die Fragen beantwortet. Ich kann nicht mehr verifizieren, dass es tatsächlich das Problem erklärt, das wir hatten. –

+0

Hallo Jens, Andre, ich stehe vor dem gleichen Szenario, das du beschrieben hast, bei dem letzten hast du herausgefunden, wie das Problem passiert, oder hast du eine Lösung dafür gefunden? – fujy

+0

Dies ist mein Code dafür, http://pastebin.com/V6FRBLME – fujy