1

与えられた 3 つのテーブル:

student (id)
student_to_class (student_id, class_id)
class (id)

Student_to_class where student_id = :studentId に where 句を適用したいと思います。「class」テーブルまたは「student」テーブルに where 句を適用する多くの例を見つけましたが、多対多テーブルには適用しません。

学生テーブルには @ManyToMany があります

@ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(
    name = "student_to_class",
    joinColumns = { @JoinColumn(name = "student_id", nullable = false) },
    inverseJoinColumns = { @JoinColumn(name = "class_id", nullable = false) }
)
private Set<ClassEntity> classes;

クラス テーブルには @ManyToMany があります

@ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(
    name = "student_to_class",
    joinColumns = { @JoinColumn(name = "class_id", nullable = false) },
    inverseJoinColumns = { @JoinColumn(name = "student_id", nullable = false) }
)
private Set<StudentEntity> students;

基準に変換しようとしているクエリは次のとおりです。

select * from student, student_to_class where student_to_class.student_id = 1 and student.id = student_to_class.class_id

このテーブルを表す実際のクラスがないため、多対多テーブルを参照する方法を見つけようとしています。

Criteria c = sessionFactory.getCurrentSession().createCriteria(ClassEntity.class);
c.createAlias("student_to_class", "entities"); // how to reference the student_to_class ?
c.add(Restrictions.eq("entities.user_id", studentEntity.getId()));

しかし、私には意味のあるエラーが表示されますが、それを修正する運があまりありませんでした: プロパティを解決できませんでした: student_to_class

4

1 に答える 1

1

Student テーブルのstudentidはテーブルの と同じであるためstudentidstudent_to_class結合テーブルでフィルタリングする必要はありません。where句を実行するだけですstudent.student_id

于 2013-02-04T01:03:15.143 に答える