Student 和 teacher 是多对多的关系:
/**
*class Student
*/
@Entity
@Table(name = "students")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Integer id;
@Column(length = 50, nullable = false)
protected String name;
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY)
@JoinTable(name = "studentteacher", joinColumns = { @JoinColumn(name = "sid",nullable=true) }, inverseJoinColumns = {
@JoinColumn(name = "tid",nullable=true) })
protected List<Teacher> teachers = new ArrayList<Teacher>();
public Student() {
}
set / get ...
}
/**
*class Teacher
*/
@Entity
@Table(name = "teachers")
public class Teacher {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(length = 50, nullable = false)
private String name;
private Integer age;
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER)
@JoinTable(name = "studentteacher", joinColumns = { @JoinColumn(name = "tid",nullable=true) }, inverseJoinColumns = {
@JoinColumn(name = "sid",nullable=true) })
private List<Student> students = new ArrayList<Student>();
public Teacher() {
}
set / get ...
}
根据老师查找所有学生的方法可以如下:
@PersistenceContext
private EntityManager entityManager;
public List<Student> getMyStudent(Teacher teacher) {
Integer tid=teacher.getId();
return entityManager.createQuery("select s from Student s inner join s.teachers as t where t.id = :tid")
.setParameter("tid", tid).getResultList();
}