2010-02-22 5 views
12

Я Субъект, который имеет связь с другой сущностью с аннотацией @Where, как иИгнорировать Hibernate @Where аннотацию

public class EntityA { 

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

} 

В последнее время неизбежное произошло, нужно загрузить EntityB-х, которые не соответствуют предложение @Where. Я мог бы удалить @Where аннотацию, но она используется много, поэтому я в идеале не хочу этого делать. Помимо загрузки списка EntityB вручную, с другим запросом, каковы мои варианты? Могу ли я сообщить Hibernate игнорировать @Where аннотацию?

+0

Я не понимаю: вы нуждаетесь в '@ Where' или нет? –

+1

Мне нужно это для 99% запросов, но есть тот, для которого он мне не нужен. – Zecrates

ответ

9

После многих исследований выяснилось, что это просто невозможно. Я настоятельно рекомендую избегать @Where, так как трудно заранее предсказать, нужны ли вам эти ассоциации или нет.

5

Вы можете сопоставить одно свойство с теми же данными, как это:

public class EntityA { 

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

} 

Важно, чтобы установить, как обновляемый ложные и вставляемый Falso, чтобы избежать проблем согласованности в ваших данных!

6

Я знаю его старый вопрос, но в случае, если кто-то ищет ответ ...
Я была такая же дилемма, вы не хотите портить ваш код с «is_deleted = ложь», где каждый выбран,

простое решение заключается в использовании родной SQL:

lst = sessionFactory.getCurrentSession(). 
createSQLQuery("select {entb.*} from EntityB entb where is_deleted=1")        
      .addEntity("entb", EntityB.class) 
      .list(); 
Смежные вопросы