Игнорировать Hibernate @ Где аннотация - PullRequest
15 голосов
/ 22 февраля 2010

У меня есть сущность, которая связана с другой сущностью, помеченной @Where, например,

public class EntityA {

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

}

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

Ответы [ 4 ]

12 голосов
/ 29 июля 2010

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

7 голосов
/ 01 ноября 2011

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

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

lst = sessionFactory.getCurrentSession().
createSQLQuery("select {entb.*}  from EntityB entb where  is_deleted=1")                            
           .addEntity("entb", EntityB.class)
           .list();
6 голосов
/ 09 июля 2018

У меня просто был тот же вопрос. Я решил проблему следующим образом:

@Query(value="SELECT * FROM EntityA", nativeQuery=true)
public ignoreWhereMethod(){}

SQL в аннотации @Query должен указывать имя таблицы и имена полей (не имя объекта).

6 голосов
/ 26 марта 2010

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

public class EntityA {

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

}

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

...