Hibernate: molti-a-uno utilizzando Formula
-
22-09-2019 - |
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
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).