[英]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.