2013-04-06 4 views

ответ

6

Да, это возможно, с простым обходным решением. Я уточнил @AdditionalCriteria аннотацию вроде этого:

@AdditionalCriteria(":disableDeletedFeature = 1 or this.isDeleted = false") 

и указано значение свойства по умолчанию для отключения флага в persistence.xml:

<property name="disableDeletedFeature" value="0"/> 

так по фильтрации по умолчанию включена, но вы можете отключить его легко на уровне EntityManager:

entityManager.setProperty("disableDeletedFeature", 1); 

Все работает отлично, надеюсь, что это поможет!

+1

Я вижу это как обходной путь, а не рекомендованное решение, но так как я осуществил это очень похоже (с использованием @AdditionalCriteria ("this.deleted =: SOFTDELETED")), я принимаю этот ответ. @James, да, есть некоторые разговоры о внедрении поддержки его на уровне в вики-разработке Eclipselink (http://wiki.eclipse.org/Talk:EclipseLink/Development/AdditionalCriteria). – Kalle

+1

Спасибо Кристоф и Калле. Оба решения работают для меня на PostgreSQL, но: disableDeletedFeature = 1 не работает для наших модульных тестов с H2. Поэтому я использовал @AdditionalCriteria («this.blocked =: disableDeletedFeature ИЛИ this.blocked = false») –

1

Если вы используете собственный SQL-запрос, критерии не будут добавлены.

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

Одна вещь, которую вы можете сделать, это установить условие ИЛИ в критерии, основанное на свойстве сеанса, тогда, когда вы установите для этого свойства значение true, вы можете отключить критерии.

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

0

Я использую eclipselink 2.4.1. Он работает только с КАВЫЧКОЙ для стоимости имущества:

@AdditionalCriteria(":disableDeletedFeature = '1' or this.isDeleted = false") 

и здесь:

entityManager.setProperty("disableDeletedFeature", '1'); 
Смежные вопросы