Tengo una relación padre/hijo entre dos tablas y la asignación correspondiente en mis clases de Java. Las tablas se parecen más o menos lo siguiente:anotación para filtrar los resultados de una asociación de @OneToMany
A (ref number, stuff varchar2(4000))
B (a_ref number, other number, foo varchar2(200))
y el código de 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;
}
Esto funciona bien, pero me gustaría añadir un filtro en las filas que recuperar de la tabla secundaria. La consulta que se genera el siguiente aspecto:
select a_ref, other, foo from B where a_ref = ?
y me gustaría que fuera:
select a_ref, other, foo from B where a_ref = ? and other = 123
El filtro adicional no sería más que un nombre de columna y un valor no modificable. ¿Hay alguna manera de hacerlo utilizando anotaciones de hibernación?
He visto @JoinFormula
, pero con eso siempre tengo que hacer referencia al nombre de una columna de la tabla padre (en el atributo name
de JoinFormula).
Gracias de antemano por cualquier consejo.
Curioso, ¿por qué no simplemente pasarlo como un parámetro? 'donde a_ref =? y otro =? '. El valor pasado puede ser codificado si eso es lo que necesita hacer (sugiero utilizar un sistema de propiedades configurables). – ADTC