Mam relacji nadrzędny/podrzędny między dwiema tabelami i odpowiednie mapowanie w moich klas Java. Tabele z grubsza wyglądać tak:adnotacja do filtrowania wyników asocjacji @OneToMany
A (ref number, stuff varchar2(4000))
B (a_ref number, other number, foo varchar2(200))
i kod Java:
@Entity
class A {
@Id
@Column(name = "REF")
private int ref;
@OneToMany
@JoinColumn(name = "A_REF", referencedName = "REF")
private Set<B> bs;
}
@Entity
class B {
@Id
@Column(name = "A_REF")
private int aRef;
@Id
@Column(name = "OTHER")
private int other;
}
Działa to dobrze, ale chciałbym dodać filtr na wierszach, które ja pobrać z tabeli podrzędnej. Kwerenda, która jest generowana wygląda następująco:
select a_ref, other, foo from B where a_ref = ?
I chciałbym go mieć:
select a_ref, other, foo from B where a_ref = ? and other = 123
Dodatkowy filtr będzie tylko nazwa kolumny i zakodowane wartość. Czy jest sposób na to, używając adnotacji hibernacji?
Spojrzałem na @JoinFormula
, ale z tym zawsze muszę odwołać się do nazwy kolumny z tabeli nadrzędnej (w atrybucie name
z JoinFormula).
Z góry dziękuję za radę.
Ciekawi, dlaczego nie przekazać go jako parametru? 'gdzie a_ref =? i inne =? '. Wartość przekazana może zostać zakodowana na stałe, jeśli jest to potrzebne (sugerowałbym jednak użycie konfigurowalnego systemu właściwości). – ADTC