У меня есть 3 стола: студент, курс и студент_курс. У каждого учащегося может быть несколько курсов, и у каждого курса может быть несколько учеников. (Много-ко-многим). Мне нужно написать метод, который получит всех студентов курса. В SQL это 2 внутренних соединения. Я попытался это:Hibernate join 3 tables
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: could not resolve property: 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;
Как написать правильный код?
Можете ли вы разместить свой класс для студентов? –
Чтобы ответить на это, нам нужно знать, как вы моделируете отношения. Поэтому, пожалуйста, предоставьте аннотированные классы. возможно, вам просто нужно прочитать http://viralpatel.net/blogs/hibernate-many-to-many-annotation-mapping-tutorial – luksch
Я разместил код ниже –