2013-04-06 12 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開発wiki(http://wiki.eclipse.org/Talk:EclipseLink/Development/AdditionalCriteria)でネイティブレベルのサポートを実装する方法についての話があります。 – Kalle

+1

クリストフとカレに感謝します。どちらのソリューションも私のためにPostgreSQLで動作しますが、disableDeletedFeature = 1はH2を使った単体テストでは機能しません。だから、私は@AdditionalCriteria( "this.blocked =:disableDeletedFeature OR this.blocked = false")を使用しました。 –

1

ネイティブSQLクエリを使用する場合、条件は追加されません。

他のパーシスタンスユニットを作成したり、追加基準なしで別のクラスを作成したりしない限り、追加するのを簡単に無効にする方法はありません。

セッションプロパティに基づいて条件にOR条件を設定すると、このプロパティをtrueに設定すると条件を無効にできます。

拡張要求をログに記録して、オプションを追加してクエリに追加しないようにすることができます。

0

私はeclipselink 2.4.1を使用しています。ここ

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

と:それは唯一のプロパティの値を引用符で動作し、私は回避策ではなく、推奨される解決策として、それを参照してください

entityManager.setProperty("disableDeletedFeature", '1'); 
関連する問題