簡體   English   中英

java jpql與眾不同,並檢索許多字段

[英]java jpql distinct and retrieve many fields

我在mysql中有以下查詢:

select distinct Month(date), year(date), field3
from table

我寫了這段代碼:

Query q = em.createQuery(
   "select distinct function('month',t.date) as month, function('year',t.date) as year, field3 as field3 from Table t"
);

我試圖將結果轉換為HashMap<String, String>但是jpql從Object到HashMap返回ClassCastException

如何獲取這些結果? 是否應該創建一個包含三個字段的自定義類? 如果正確,則將返回月份和年份?

PS:我正在使用jdk 1.8,jpa 2.1,mysql和eclipselink

您可以通過鍵入查詢的預期結果來檢索結果。 一種通用方法是指示您要檢索Object []的列表。
該列表對應於請求返回的每一行,而Object []包含每一行返回的值。 對象的順序與返回值的順序相同。

不需要別名,因為結果中未使用別名。 所以我刪除了它們。
而且,您不應該從表名進行查詢,否則它看起來像是SQL本機查詢(可以通過JPA進行查詢),而應該在FROM子句中指定實體名稱。 所以我修改了它的原理。
這是修改后的查詢以及結果處理:

 TypedQuery<Object[]> query = em.createQuery(
      "select distinct function('month',t.date) ,
       function('year',t.date) , field3 from YourEntity t", Object[].class);
  List<Object[]> results = query.getResultList();
  for (Object[] result : results) {
      System.out.println("month: " + result[0] + ", year: " + result[1]
      + ", field3:"+  result[2]);
  }

這不是檢索數據的最漂亮方法,但是如果它符合您的需求,則您無需做更多的事情。

我是否應該創建一個包含三個字段的自定義類?

如果將此自定義類在其他地方重用,則可以這樣做。 否則,看起來更多的開銷。

暫無
暫無

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

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