Ответ 1
После многих исследований выяснилось, что это просто невозможно. Я настоятельно рекомендую избегать @Where, так как трудно предсказать заранее, если вам когда-либо понадобится эти ассоциации или нет.
У меня есть Entity, который имеет ассоциацию с другим Entity, аннотированным с помощью @Where, например
public class EntityA {
@OneToMany
@Where(...)
private List<EntityB> entityBList;
}
В последнее время произошло неизбежное, мне нужно загрузить EntityB, который не соответствует предложению @Where. Я мог бы удалить @Where аннотацию, но она используется много, поэтому я в идеале не хочу этого делать. Помимо загрузки списка EntityB вручную, с другим запросом, каковы мои варианты? Могу ли я сообщить Hibernate игнорировать @Where аннотацию?
После многих исследований выяснилось, что это просто невозможно. Я настоятельно рекомендую избегать @Where, так как трудно предсказать заранее, если вам когда-либо понадобится эти ассоциации или нет.
Я знаю его старый вопрос, но в случае, если кто-то ищет ответ...
У меня была та же дилемма, вы не хотите, чтобы ваш код был" is_deleted = false" каждый раз, когда вы выбираете,
простое решение - использовать собственный SQL:
lst = sessionFactory.getCurrentSession().
createSQLQuery("select {entb.*} from EntityB entb where is_deleted=1")
.addEntity("entb", EntityB.class)
.list();
Вы можете сопоставить другое свойство с такими же данными, как это:
public class EntityA {
@OneToMany
@JoinColumn(name='theColumnName', insertable=false, updateable=false)
private List<EntityB> entityBListReadOnly;
}
Важно установить как обновляемое значение false и вставить falso, чтобы избежать проблем согласованности в ваших данных!