簡體   English   中英

JPA使用where子句選擇行

[英]JPA select rows with where clause

我知道entityManager.find()方法可用於獲取具有主鍵的行。

但是我需要定義一個通用的find方法,該方法接受具有where子句條件的映射。 在映射中,鍵將是列名,值將是where子句的列名值。 此方法應返回所選行的列表。

有人可以幫我嗎?

看一下: EntityManager.createQuery 如果我正確理解您的問題,這將使您可以創建要執行的查詢。 您也可以看一下使用CriteriaBuilder的方法

跟隨可能是過大的,但是是使用criteriaBuilder處理它的一種相當通用的方法。 雖然無法在此處粘貼代碼(工作),但我創建了一個抽象BaseFilter <Entity>類。

然后,簡單的部分是使實現對象提供getXX,setXX屬性。 然后添加了getPredicates()以返回謂詞ArrayList,然后抽象BaseDAO可以調用該謂詞來執行查詢。

我們專門與getXX和setXXX一起使用,因此我們可以通過get(Entity1_.childObject).get(ChildObject_.grandChildObject)引用元素,以協助重構。 JPA還通過字符串名稱支持它,因此您可以使用它來實現getPredicates。

JPA在他們的調用中需要實際的Entity.class引用,嘗試獲取它很有趣。 最終,谷歌搜索打開了它。

find獲取相對於主鍵的行。現在,您要使用“ 通用find方法,該方法接受具有where子句條件的映射。在映射中,key將是列名,value將是where子句的列名值。此方法應返回“選定行的列表” ,為此您必須像下面這樣去CriteriaQuery:

以下簡單的Criteria查詢返回數據源中Pet實體的所有實例:

EntityManager em = ...;
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
cq.select(pet);
TypedQuery<Pet> q = em.createQuery(cq);
List<Pet> allPets = q.getResultList();

等效的JPQL查詢為:

SELECT p FROM Pet p

此外,我建議您在您的實體中進行基於注釋的映射,並為方法尋找setter和getter。在該設計中,您還可以通過Java邏輯定制方法,以便在此處閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM