2010-02-22 20 views
12

que contar con una entidad que tiene una asociación a otra entidad anotado con @Where, al igual queIgnorar Hibernate @Where anotación

public class EntityA { 

    @OneToMany 
    @Where(...) 
    private List<EntityB> entityBList; 

} 

Recientemente lo inevitable ha sucedido, lo que necesito para cargar EntityB de que no se ajustan a la cláusula @Where. Podría eliminar la anotación @Where, pero se usa mucho, por lo que, idealmente, no quiero hacer eso. Además de cargar la lista de EntityB's manualmente, con otra consulta, ¿cuáles son mis opciones? ¿Puedo decirle a Hibernate que ignore la anotación @Where?

+0

yo no lo entiendo: ¿necesita el '@ WHERE' o no? –

+1

Lo necesito para el 99% de las consultas, pero hay uno para el que no lo necesito. – Zecrates

Respuesta

9

Después de mucha investigación, parece que esto es simplemente imposible. Recomiendo evitar @Where, ya que es difícil predecir de antemano si alguna vez necesitarás esas asociaciones o no.

5

Puede asignar otra propiedad con los mismos datos como estos:

public class EntityA { 

    @OneToMany 
    @JoinColumn(name='theColumnName', insertable=false, updateable=false) 
    private List<EntityB> entityBListReadOnly; 

} 

importante establecer falso falso e insertable como actualizable para evitar problemas de consistencia en sus datos!

6

Sé que es una vieja pregunta, pero en caso de que alguien busque una respuesta ...
que tenía el mismo dilema, que no quiere meterse con el código "is_deleted = false" en todas partes que seleccione,

solución simple es utilizar SQL nativo:

lst = sessionFactory.getCurrentSession(). 
createSQLQuery("select {entb.*} from EntityB entb where is_deleted=1")        
      .addEntity("entb", EntityB.class) 
      .list(); 
Cuestiones relacionadas