我是Hibernate的新手,我想弄清楚如何查询映射为实体的多对多关系,因为需要额外的列。休眠查询与多列到多关系
特别地,下面的我发现在codejava.net(http://www.codejava.net/frameworks/hibernate/hibernate-many-to-many-association-with-extra-columns-in-join-table-example)的例子中我这样映射的关系:
Student.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
}
Course.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查询找出在给定课程中注册的学生的姓名(我知道课程的名称和年份)。 我知道这可能很简单,但我无法在HQL中产生工作查询。
预先感谢您。
它会不会对条款的工作。 –
请给你的答案添加一些解释。在SO上不鼓励使用仅有代码的答案。谢谢。 –
这种方法很有效,我喜欢它,因为它不需要子查询,而且非常简洁。所以我接受了这个答案,即使@omkar sirra提出的答案也在工作。不幸的是,我没有足够的声望来提高你的答案omkar,但无论如何感谢你。 –