2010-03-03 4 views
5

Usiamo Sospensione annotazioni 3.4.0GA e Sospensione nucleo 3.3.2.GA (noto anche come le versioni stabili correnti) in un database Oraclevalore 0 nella Hibernate IndexColumn mappata con base = 1

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

Quindi la mia domanda è: qualcuno sa di un modo per ottenere un valore di 0 nella colonna indice di una relazione uno-a-molti, quando è mappato con una base = 1? Possibilmente correlato all'uso di generici o MappedSuperclass.

Si noti che il codice è piuttosto complesso, perché anche l'ereditarietà è implicata.

Di seguito sono riportati i relativi pezzi delle 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. Sono mappati come entità. Inoltre, specificano colonne id e version, nonché tonnellate di altri attributi e riferimenti, ma nulla è correlato alla mappatura in questione.

+0

Ciao Jens, sto affrontando lo stesso scenario che hai descritto, alla fine hai trovato come si verifica questo problema o hai trovato una soluzione per questo ?, Questo è il mio codice per esso, http: // pastebin. com/V6FRBLMe – fujy

+0

Non ho mai trovato altro su di esso rispetto a quanto descritto in questa domanda e nei commenti. –

risposta

2

So che sono passati quasi due anni ma mi sono imbattuto in questo mentre cercavo una soluzione per lo stesso problema. Stiamo usando hbm tramite i file xml quindi non sono sicuro se ciò sarà di aiuto. Nel nostro caso il problema era la mappatura inversa. Se il controllo sulla lista (e sull'indice) era sul lato dell'elenco (i "molti") come nel tuo caso abbiamo avuto il problema. Lo ha risolto risolvendolo. Non so come è fatto con le annotazioni.

Un'altra fonte per l'errore può essere se si imposta "elementi" sul tuo oggetto AbstractReihung in modo accidentale. Hibernate utilizza oggetti proxy per proprietà lazy-loaded. Se imposti un'intera nuova raccolta invece di modificare quella esistente, sovrascrivi l'oggetto proxy.

+0

Ho accettato la risposta perché risponde alle domande. Non posso più verificare che in realtà spieghi il problema che abbiamo avuto. –

+0

Ciao Jens, Andre, sto affrontando lo stesso scenario che hai descritto, alla fine ho scoperto come si verifica questo problema o hai trovato una soluzione per questo? – fujy

+0

Questo è il mio codice per questo, http://pastebin.com/V6FRBLMe – fujy