有两个实体student 与 exam,它们是多对多的关系,student中有 List examlist;
前台选择exam的id(考试编号)选项(可多选),如何查询参加过所选考试的学生?hql语句该怎么写呢,使用多个占位符写死不可取,因为不知道前台会选择几个考试选项。
有两个entity,要实现查询参加前台已选择考试的编号(可多选)的学生
1.Student
2.Exam
3.StuExam中间实体(Exam 与 Student)
class Student{
private int id;
........
@OneToMany(mappedBy="student",targetEntity="StuExam")
private List stuExamList = new ArrayList();
}
class Exam{
private int id;
........
@OneToMany(mappedBy="exam",targetEntity="StuExam")
private List stuExamList = new ArrayList();
}
class stuExam{
private int id;
@ManyToOne
@JoinColumn(name="examId)
private Exam exam;
@ManyToOne
@JoinColumn(name="studentId")
private Student student;
}
你首先新建一个集合 ,这个集合 把你的多选的ID 全部放进来 这一步不会再详细问我
然后建立sql 语句 循环数组长度,执行就好 如果你想要一个几何中
不限麻烦 就联合查询 ,想简单一点就list追加
例如 一个学生表Student 一个教师表teacher学生表属性 id ; name ; Setteachers;教师表 属性 id ; name ; Setstudents;已有学生实例 student1,要查询返回 教这个学生的教师集合; 请问该如何写HQL 语句; WHERE 后面语句 如何写? public ListfindByStudentr(Student student) { return getSession().createQuery( "FROM Teacher t WHERE XXXXXXXXXX") .setParameter(0, student) .list(); }
代码如下 :记得采纳谢谢!
public List ListfindByStudentr(Student student) {
Student stu= (Student)session.createQuery("FROM Student stu WHERE id = ?") .setParameter(0, student.id); ).uniqueResult();
return stu.getTeachers;
}
以上两个答案不知道哪里来的,我哪里说有Teacher?
可以写一个方法将多选的考试编号拼接起来,然后把方法作为条件放到hql语句里面进行查询
写一个方法将多选的考试编号拼接起来
老哥 我能问一下你的表结构么
我感觉你没用关系表 直接映射多对多么
解决你第二个问题,判断你传回来的数值是否为空
比如这样写吧
StringBuffer hql = new StringBuffer();
hql.append(select * from xx where1=1)
if(
student.xx==null&&student.xx=""
)
hql.append(and ....)
我的问题没有说明白,有两个entity,要实现查询参加前台已选择考试的编号(可多选)的学生
1.Student
2.Exam
3.StuExam中间实体(Exam 与 Student)
class Student{
private int id;
........
@OneToMany(mappedBy="student",targetEntity="StuExam")
private List stuExamList = new ArrayList();
}
class Exam{
private int id;
........
@OneToMany(mappedBy="exam",targetEntity="StuExam")
private List stuExamList = new ArrayList();
}
class stuExam{
private int id;
@ManyToOne
@JoinColumn(name="examId)
private Exam exam;
@ManyToOne
@JoinColumn(name="studentId")
private Student student;
}