以下是问题的概述..
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类中,没有getter方法来获取其中的值。如果无法实现,那么我将如何使用Criteria API?
谢谢。
答案 0 :(得分:0)
我想找回有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分的学生提供地图
答案 1 :(得分:0)
示例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)