qq_32686815
Macmanboy
采纳率100%
2018-06-24 16:43 阅读 1.3k
已采纳

关于hql中集合属性的条件查询语句怎么写

20

有两个实体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;

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

8条回答 默认 最新

  • 已采纳
    weixin_42267525 有梦想的老咸鱼 2018-06-26 02:49

    你首先新建一个集合 ,这个集合 把你的多选的ID 全部放进来 这一步不会再详细问我
    然后建立sql 语句 循环数组长度,执行就好 如果你想要一个几何中
    不限麻烦 就联合查询 ,想简单一点就list追加

    点赞 评论 复制链接分享
  • X_010101 X_献身 2018-06-25 00:05

    例如 一个学生表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(); }

    点赞 评论 复制链接分享
  • weixin_41804925 weixin_41804925 2018-06-25 02:09

    代码如下 :记得采纳谢谢!
    public List ListfindByStudentr(Student student) {
    Student stu= (Student)session.createQuery("FROM Student stu WHERE id = ?") .setParameter(0, student.id); ).uniqueResult();
    return stu.getTeachers;
    }

    点赞 评论 复制链接分享
  • qq_32686815 Macmanboy 2018-06-25 02:14

    以上两个答案不知道哪里来的,我哪里说有Teacher?

    点赞 评论 复制链接分享
  • xiang_obaby xiang_obaby 2018-06-25 02:31

    可以写一个方法将多选的考试编号拼接起来,然后把方法作为条件放到hql语句里面进行查询

    点赞 评论 复制链接分享
  • xxlclcxx xxlclcxx 2018-06-25 02:53

    写一个方法将多选的考试编号拼接起来

    点赞 评论 复制链接分享
  • weixin_42267525 有梦想的老咸鱼 2018-06-25 05:50

    老哥 我能问一下你的表结构么
    我感觉你没用关系表 直接映射多对多么
    解决你第二个问题,判断你传回来的数值是否为空
    比如这样写吧
    StringBuffer hql = new StringBuffer();
    hql.append(select * from xx where1=1)
    if(
    student.xx==null&&student.xx=""
    )
    hql.append(and ....)

    点赞 评论 复制链接分享
  • qq_32686815 Macmanboy 2018-06-25 08:08

    我的问题没有说明白,有两个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;

    }

    点赞 评论 复制链接分享

相关推荐