簡體   English   中英

使用JPQL輸入非實體結果的類型化查詢

[英]Typed queries for non-entity results with JPQL

TypedQuery<UserNameAndPostCount> query = entityManager.createQuery(
  "select new com.loki2302.JPQLTest$UserNameAndPostCount" + 
  "(u.userName, count(p.id)) " +
  "from User u " + 
  "left join u.posts p group by u.userName", UserNameAndPostCount.class);

List<UserNameAndPostCount> resultList = query.getResultList();

在不對JPQL查詢文本中的com.loki2302.JPQLTest$UserNameAndPostCount進行硬編碼的情況下,是否有任何“正式”方法可以做到這com.loki2302.JPQLTest$UserNameAndPostCount

像這樣的查詢

entityManager.createQuery("SELECT u.userName, count(p.id) FROM User u LEFT JOIN u.posts p GROUP BY u.userName", UserNameAndPostCount.class);

可能會在某些JPA實現上起作用,當然DataNucleus JPA旨在做到這一點。 畢竟,最后一個參數是結果類,因此基本上可以說是用這些結果字段作為參數創建該類型的對象(或使用名稱與這兩個結果字段一致的設置器),並且您可以輕松地將“ AS { select子句中的“ alias}”來獲取結果字段以匹配結果類中的bean屬性名稱。

為了避免這種硬編碼,您可以使用entityManager接口的createNamedQuery(String)。 要使用此方法,您必須在模型(實體類)中創建NamedQueries並使用Query對象代替TypedQuery。

暫無
暫無

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

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