2014-03-05 63 views
3

我目前的應用程序是一個EJB 2.x系統,並且在任何地方都使用Entity Beans,並使用CMR & CMP。我期待用標準JPA替換持久層,並且我無法確定以下是否可能。如何使用JPA2註釋將結果限制爲活動記錄

當請求刪除記錄時,系統通過在表VOID_IND ='y'上設置一列來實現邏輯刪除。系統中的當前處理邏輯將使用CMR檢索子表中的所有項目,然後循環並丟棄具有VOID_IND = 'y'的項目,並僅返回到客戶機VOID_IND = 'n'

這對我來說似乎效率很低,我寧願不首先返回這些「已刪除」的記錄。不幸的是,我只能找到特定於實現的註釋來幫助解決這個問題。

Hibernate作爲@Where和的EclipseLink @AdditionalCriteria

但是,如果有與JPA明確工作標準批註我想知道?

回答

1

不,不幸的是沒有標準的過濾器。

我認爲你應該創建一個查詢。

JPA包含JPQL和Criteria API,但我強烈建議您使用類型安全的自動生成的「查詢」類來查找QueryDSL,它非常適合使用。

這是QueryDSL中的一個例子;這不是太多的代碼。

  • parent是父對象。
  • qChild是QueryDSL魔法的一小部分。它是一個靜態導入到auto.generated查詢類中的字段的子項。其實,這真的很好。

Query q = new Query(); 

List<Child> active = q.from(qChild) 
    .where(qChild.parent.eq(parent), qChild.voidInd.eq('Y')) 
    .list(qChild); 

或者

q.from(qChild); 
q.where(qChild.parent.eq(parent)); 
q.where(qChild.voidInd.eq('Y')); 
List<Child> active = q.list(qChild); 
+0

非常感謝你對這個答案! –

+0

我不妨提一下,QueryDSL背後的主要開發人員似乎相當有幫助,並且在Stackoverflow上也很活躍。您好蒂莫順便說一句,謝謝你解決我的答案。 – KarlP

相關問題