1

私は私のmysqlデータベースに2つのテーブルを持っています:

1.teacher(id(pk),name,phone,email)
2.student(id(pk),teacher'sid(FK),name,phone,email)

Student テーブルには、 teacher.id を参照する外部キー、 teacher'sid があります。

ID(teachers.id) が (student.teacher'sid) と同じで、student.name = "Steven" である教師を選択したいと考えています。

テーブルと同じクラス名とプロパティを持つ 2 つのクラスを作成し、マッピングを構成しました。

@Entity
class teacher {
@Id
int id;
String name;
String phone;
String email;
}

@Entity
class student {
@Id
int id;
int teachersid;
String name;
String phone;
String email;
}

彼の名前が「steven」である学生を次の方法で選択できます。

Criteria q = session.createCriteria(student.class).add(
                Restrictions.eq("name", "stevens"));

「スティーブン」の先生を取り戻すにはどうすればいいですか?何かのようなもの

(select * from teacher(where teacher.id = student.teachersid(where student.name="stevens")))

、ただし、Hibernate Criteria Api を使用します。

前もって感謝します!

4

3 に答える 3

6
Criteria c = s.createCriteria(Teacher .class,"tchr");
c.createCriteria("students", "s");//Teacher class should contain students collection
c.add(Restrictions.eq("s.name", "Ashok"));
List l=c.list();

これがあなたを助けることを願っています。ご不明な点がございましたら、お知らせください。

于 2012-08-20T11:01:50.817 に答える
0

Hibernate エンティティ クラスは、テーブル間の関係を正しく反映していません。Student エンティティは次のようになります。

@Entity
class student {
@Id
int id;
teacher teach;
String name;
String phone;
String email;
}

エンティティを正しく変更すると、休止状態がテーブル間の結合を自動的に発行します。

于 2012-08-20T09:57:30.763 に答える
0

最も簡単な方法は、教師エンティティをメイン エンティティとして使用し、sqlRestriction を適用してこのテーブルをフィルタリングすることだと思います。取得するのは教師エンティティであり、この方向の教師 - >生徒へのマッピングがないため、学生クラスから直接基準と制限を使用することはできないと思います。

私はこれがあなたのために働くと思います:

Criteria q = session.createCriteria(teacher.class)
          .add( Restrictions.sqlRestriction("exists (select 1 
                from student_table s where    s.teachersid = {alias}.id 
                and s.student_name=?", "stevens", Hibernate.STRING) )
于 2012-08-20T09:58:18.007 に答える