温馨提示×

hibernate多表关联查询mysql

小樊
93
2024-09-06 16:12:49
栏目: 云计算
亿速云mysql数据库,读写分离,安全稳定,弹性扩容,低至0.3元/天!! 点击查看>>

在Hibernate中,我们可以使用HQL(Hibernate Query Language)或者Criteria API来实现多表关联查询。这里我将给出一个使用HQL的例子。

假设我们有两个实体类:Student和Course,它们之间存在一对多的关系,即一个学生可以选修多门课程,一门课程可以被多个学生选修。

首先,我们需要在实体类中定义关联关系:

@Entity
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @OneToMany(mappedBy = "student", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Course> courses;
}

@Entity
public class Course {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @ManyToOne
    @JoinColumn(name = "student_id")
    private Student student;
}

接下来,我们可以使用HQL来实现多表关联查询。例如,我们想要查询某个学生选修的所有课程,可以编写如下HQL语句:

String hql = "SELECT c FROM Course c JOIN c.student s WHERE s.id = :studentId";
Query query = session.createQuery(hql);
query.setParameter("studentId", studentId);
List<Course> courses = query.list();

这里,我们使用了JOIN关键字来实现多表关联,并通过WHERE子句来过滤结果。

同样地,如果我们想要查询某门课程的所有选修学生,可以编写如下HQL语句:

String hql = "SELECT s FROM Student s JOIN s.courses c WHERE c.id = :courseId";
Query query = session.createQuery(hql);
query.setParameter("courseId", courseId);
List<Student> students = query.list();

这样,我们就可以使用Hibernate实现多表关联查询了。

亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>

推荐阅读:foreach遍历MySQL多表关联查询

0