1

我的 mysql 数据库中有 2 个表:

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

学生表有一个外键,即teacher'sid,它引用了teacher.id。

我想选择他们的 id(teachers.id) 与 (student.teacher'sid) 相同的老师,其中 student.name = "Steven"。

我已经创建了两个具有与表相同的类名和属性的类,并且我已经配置了映射。

@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;
}

我可以通过以下方式选择他的名字是“史蒂文”的学生:

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;
}

正确修改实体后,hibernate 会自动在表之间发出联接。

于 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 回答