Domanda

Stiamo usando Hibernate annotazioni 3.4.0GA e Hibernate Nucleo 3.3.2.GA (noto anche come le versioni attuali stabili) in un database Oracle

Abbiamo un mapping uno-a-molti con base = 1, che ha funzionato bene per un tempo moooolto, ma la settimana scorsa abbiamo trovato alcune voci nel database in cui la colonna di indice conteneva un valore pari a 0 che ha causato tutti i tipi di problemi.

Quindi la mia domanda è: Qualcuno sa di un modo per ottenere un valore pari a 0 nella colonna di indice di una relazione uno-a-molti, quando si è mappato con una base = 1? Possibilmente correlate ai farmaci generici di utilizzo o MappedSuperclass.

Si noti che il codice è piuttosto complessa, perché l'ereditarietà è coinvolto pure.

Di seguito sono riportati i relativi pezzi di classi:

// 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;
}

Le classi effettivi ereditano da questi e forniscono classi concrete per i parametri di tipo. Essi sono mappati come entità. Essi hanno inoltre specificare l'ID e la versione colonne, nonché tonnellate di altri attributi e riferimenti, ma nulla in relazione alla mappatura a portata di mano.

È stato utile?

Soluzione

Lo so sono passati quasi due anni, ma ho inciampato su questo, mentre la ricerca di una soluzione per lo stesso problema. Stiamo usando HBM tramite file XML in modo da io non sono molto sicuro se questo sarà di aiuto. Nel nostro caso il problema era la mappatura inversa. Se il controllo della lista (e l'indice) era sul lato lista-elemento ( "molti"), come nel tuo caso abbiamo avuto il problema. Spostandola verso l'alto risolto questo. Non so come questo è fatto con le annotazioni.

Un'altra fonte per l'errore può essere se si acctually imposta "elementi" sul vostro oggetto AbstractReihung. Sospensione utilizza oggetti proxy per pigri proprietà caricati. Se si imposta una nuova collezione, invece di modifing quello esistente si sovrascrive l'oggetto proxy.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top