java - Hibernate连接3个表

标签 java hibernate many-to-many criteria

我有 3 个表:Student、Course 和 Student_Course。每个学生可能有几门类(class),每门类(class)可能有几个学生。 (多对多)。我需要编写一个方法来让所有学生都学习一门类(class)。在 SQL 中它是 2 个内连接。我试过这个:

Criteria criteria = session.createCriteria(Student.class, "s");
        criteria.createAlias("student_course", "s_c");
        criteria.createAlias("course", "c");
        criteria.add(Restrictions.eq("s.student_id", "s_c.student_id"));
        criteria.add(Restrictions.eq("s_c.course_id", "c.course_id"));
        criteria.add(Restrictions.eq("c.course_id", course.getId()));
        courses = criteria.list();

但是我得到一个org.hibernate.QueryException:无法解析属性:student_course of:com.example.entity.Student

@Entity
@Table(name = "STUDENT")
public class Student {

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "STUDENT_ID", unique = true, nullable = false)
private long id;

@ManyToMany(targetEntity = Course.class, fetch = FetchType.EAGER)
@JoinTable(name = "STUDENT_COURSE", joinColumns = { @JoinColumn(name = "student_id") }, inverseJoinColumns = { @JoinColumn(name = "course_id") })
private Set<Course> courses = new HashSet<Course>();

和:

@Entity
@Table(name = "COURSE")
public class Course{
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "COURSE_ID", unique = true, nullable = false)
private long id;

如何编写正确的代码?

最佳答案

我认为你应该在你的Course类中添加这个注释

@ManyToMany(mappedBy="courses")
private Set<Student> students = new HashSet<Student>();

这就是通常建模的多对多关系。现在您可以非常轻松地访问类(class)的学生。

关于java - Hibernate连接3个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19111686/

相关文章:

java - 哪个 Java 阻塞队列最适合多生产者和单个或多个消费者场景?

JavaFx——在SceneBuilder中定位组件

java - 有没有办法创建一个可以在不同类上的所有 junit 单元测试之前运行的 spring 上下文?

需要Java缓存解决方案

java - 使用 hibernate 和 ms sql server 驱动程序

java - 我们可以在 hibernate.cfg.xml 文件中使用 hibernate.hbm2ddl.auto=create 和 hibernate.hbm2ddl.auto=update 吗

postgresql - 在orm.xml(Spring Data/JPA 2.1/Hibernate 5.3.7/Postgresql)中定义@Type?

java - JPA——一个实体中相同类型的多个多对多列表

node.js - 在 Node.js 上使用 mongoose 通过字符串键入多对多关系

c# - 多对多排序