簡體   English   中英

如何在JPQL中使用地圖?

[英]How to work with maps in JPQL?

這是問題的概述。

public class Student
{
  private Map<Test,MarkWrapper> marks;
  ...
}

public class MarkWrapper
{
  private List<Mark> marks;
  ...
}

public class Test
{
  private String name;
  private Date date;
  ..
}

public class Mark
{
  private int mark;
  private int total;
  private float average;
  ...
}

現在,我想找回獲得90分的學生。 如何解決這個問題,而不是通過刪除地圖來更改體系結構?

在Map類中,沒有獲取方法來獲取其中的值。 如果無法實現,那么我將如何使用Criteria API?

謝謝。

我想找得到90分的學生

如果要檢索標記的准確度為90的學生,則將地圖關鍵字設置為90並為學生增加價值。

例:

在地圖上對那些通過迭代studentList獲得90分的學生進行雙關

Map<Integer,Student> studentMap=new HashMap<Integer, Student>();
List<Student> studentList= <yourStudentList>;
for(Student student : studentList){
    if(student.getMarks() == 90){
        studentMap.put(90,student);
    }
}

編輯:

我假設您擁有實體類名稱為Student並具有屬性marks ,依此類推。

使用JPQL:

您可以從數據庫中獲取學生名單

String jpql="Select s from Student s where s.marks =:marks ";
Query query=em.createQuery(jpql);
query.setParameter("marks", 90);
List<Student> studentList=query.getResultList();//returns all students who got marks 90

要么

String jpql="Select s from Student s ";
Query query=em.createQuery(jpql);
List<Student> studentList1=query.getResultList();//returns all students

就像我之前說的,您可以通過迭代studentList1將所有獲得90分的學生放入地圖

JPQL查詢字符串示例:

SELECT s FROM Student s JOIN s.marks sm 
WHERE VALUE(sm) IN (
  SELECT mw FROM MarkWrapper mw JOIN mw.marks mwm 
  WHERE mwm.mark = :value
)

其中:value是查詢參數(即90)

暫無
暫無

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

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