Domanda

Spero che qualcuno possa aiutarmi a trovare una risposta.

Sto lavorando con un database legacy e non posso modificare le tabelle preesistenti, perché altre applicazioni dipendono da loro.

Ho tre principali tabelle esistenti:. A, B, C

A ha una colonna con riferimento B (molti a uno relazione). Il problema è che dovrebbe avere una relazione con C non a B. Così ho creato una mappatura * -1 aC.

Tables: A,B,C,BC (all have ID field)
A-B many to one
B-C many to one through BC
Needed:A-C without altering A,B or C

Non voglio avere entità java per B o BC, semplicemente A e C, e A deve avere un campo A.c

Finora ho provato con l'annotazione @formula senza alcun risultato.

class A{
  @ManyToOne
  @Formula(value="select BC.c from BC where BC.b = b")
  private C c;
}

Questo produce il seguente SQL:

select this_.c_ID from A this_

Non riesce, ovviamente, perché non v'è alcuna colonna c_ID nella tabella A (il motivo per cui si formula ignorato completamente?).

La rimozione l'annotazione @ManyToOne produce:

select (select BC.c from BC where BC.b = this_.b) as formula_0 from A this_

Questo sarebbe perfetto, tranne Hibernate si aspetta un valore binario (la serializzazione della classe C?) E genera un'eccezione quando lancia l'Integer che riceve.

L'ID dovrebbe essere sufficiente per pigri carico, ma come faccio a dirgli di farlo? qualsiasi uso del @ManyToOne rompe la formula.

Come posso realizzare il collegamento A-C senza alterare le tabelle A, B, C o la creazione del B classi Java o BC?

Grazie per qualsiasi info, Dan

È stato utile?

Soluzione

suona molto come questo bug , purtroppo nessuna correzione pronto utilizzando annotazioni, sembra si potrebbe farlo funzionare con file di mapping XML per le classi però.

Altri suggerimenti

questo dovrebbe lavorare in Hibernate 3.5.0-Beta-2 + ( HHH-4382 è stato risolto).

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