Frage

Wir verwenden Hibernate Annotations 3.4.0GA und Hibernate Core 3.3.2.GA (auch bekannt als die aktuellen stabilen Versionen) für eine Oracle-Datenbank

Wir haben eine Eins-zu-Viele-Zuordnung mit Basis=1, die lange Zeit gut funktioniert hat, doch letzte Woche haben wir einige Einträge in der Datenbank gefunden, bei denen die Indexspalte den Wert 0 enthielt, was alle möglichen Probleme verursachte.

Meine Frage ist also:Kennt jemand eine Möglichkeit, den Wert 0 in die Indexspalte einer Eins-zu-viele-Beziehung zu bekommen, wenn dieser eine Basis = 1 zugeordnet ist?Möglicherweise im Zusammenhang mit der Verwendung von Generics oder MappedSuperclass.

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

Im Folgenden sind die relevanten Teile der Klassen aufgeführt:

// 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 eigentlichen Klassen erben von diesen und stellen konkrete Klassen für die Typparameter bereit.Sie werden als Entität abgebildet.Sie geben auch ID- und Versionsspalten sowie jede Menge andere Attribute und Referenzen an, aber nichts, was mit der vorliegenden Zuordnung zusammenhängt.

War es hilfreich?

Lösung

Ich weiß, es ist fast zwei Jahre her, aber ich bin darauf gestoßen, als ich nach einer Lösung für dasselbe Problem suchte.Wir verwenden hbm über XML-Dateien, daher bin ich mir nicht ganz sicher, ob das helfen wird.In unserem Fall war das Problem die umgekehrte Zuordnung.Wenn die Kontrolle über die Liste (und den Index) wie in Ihrem Fall auf der Listenelementseite (den „vielen“) lag, hatten wir das Problem.Durch Verschieben nach oben wurde das Problem behoben.Ich weiß nicht, wie das mit Anmerkungen gemacht wird.

Eine weitere Fehlerquelle kann sein, dass Sie tatsächlich „Elemente“ für Ihr AbstractReihung-Objekt festlegen.Hibernate verwendet Proxy-Objekte für verzögert geladene Eigenschaften.Wenn Sie eine völlig neue Sammlung festlegen, anstatt die vorhandene zu ändern, überschreiben Sie das Proxy-Objekt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top