У меня есть объект:
@Entity
@Table(name = "[Usermaster]")
@Where(clause = "isDeleted = 0")
public class User {
//...
}
в каком-то потоке мне нужно игнорировать @Where аннотацию и получить пользователя, даже если isDeleted не равен 0. Как я могу это сделать? (Я использую CRUD-репозитории для запроса)
Существует динамическая версия настройки @Where
, это @Filter
. Видеть:
Hibernate имеет возможность предварительно определить критерии фильтра и присоединить эти фильтры как на уровне класса, так и на уровне коллекции. Критерии фильтра позволяют вам определить предложение ограничения, подобное существующему атрибуту
"where"
доступному для класса и различных элементов коллекции.
Управление @Filter немного сложнее, в двух словах:
<filter-def>
/@FilterDef
требуется для определения фильтра<filter>
/@Filter
должен быть присвоен классу или наборуsession.enableFilter("myFilter").setParameter("myFilterParam", "some-value");
Таким образом, это, будучи немного более сложным, обеспечивает именно то, что нам нужно: dynamic @Where
чтобы быть @Where
/выключенным во время выполнения
@Filter
более сложное. С другой стороны, это единственный способ - как @Where
оценивать @Where. Т.е. @where
- фиксированное отображение. Ни в коем случае как его выключить. Я знаю, что это не такой хороший ответ, как вы хотели ... но, с другой стороны, мой опыт с таким фильтром действительно хорош . При наличии некоторого AOP он включается автоматически для нас ... скажем, в 99% случаев. Если нужно, мы можем отключить это .. и это работает;)
Старый вопрос, но ответ может быть здесь:
простым решением является использование собственного SQL:
lst = sessionFactory.getCurrentSession().
createSQLQuery("select {entb.*} from EntityB entb where is_deleted=1")
.addEntity("entb", EntityB.class)
.list();