我是 Hibernate 的新手,由于需要额外的列,我正在尝试弄清楚如何查询映射为实体的多对多关系。
特别是,按照我在 codejava.net ( http://www.codejava.net/frameworks/hibernate/hibernate-many-to-many-association-with-extra-columns-in-join-table-example ) 找到的示例,我映射了如下关系:
学生.java
@Entity
public class Student implements Serializable {
@Id
@Column
private String email;
@Column(nullable = false)
private String password;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String surname;
// Constructor, getters, setters, hashcode, equals
}
类(class).java
@Entity
@Table(
uniqueConstraints = @UniqueConstraint(
columnNames {"name","year"})
)
public class Course implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private long id;
@Column
private String name;
@Column
private String year;
@OneToMany(mappedBy = "course")
private Set<Student_Course> students = new LinkedHashSet<>();
// Constructor, getters, setters, hashcode, equals
}
Student_Course.java
@Entity
public class Student_Course implements Serializable {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column
private long id;
@ManyToOne
@JoinColumn(name = "student_email")
private Student student;
@ManyToOne
@JoinColumn(name = "course_id")
private Course course;
@Column(nullable = false,
columnDefinition = "int default 0")
private int score;
// Constructor, getters, setters, hashcode, equals
}
现在我想要实现的是通过 hql 查询找出就读给定类(class)的学生的姓名(我知道类(class)的名称和年份)。 我知道这可能很简单,但我无法在 HQL 中生成有效的查询。
提前谢谢您。
最佳答案
我相信这个查询可以做你想做的事:
SELECT sc.student.name, sc.student.surname
FROM Course c JOIN c.students sc
WHERE c.name = :name AND c.year = :year
关于java - Hibernate 对带有额外列的多对多关系的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39086188/