我的mysql数据库2表:
1.teacher(id(pk),name,phone,email)
2.student(id(pk),teacher'sid(FK),name,phone,email)
学生表中有一个外键,老师的名字,对于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。
提前致谢!
答案 0 :(得分: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();
希望这会对你有所帮助。如果您有任何问题,请告诉我。
答案 1 :(得分:0)
您的Hibernate实体类未正确反映表之间的关系。 Student实体应该看起来类似于
@Entity
class student {
@Id
int id;
teacher teach;
String name;
String phone;
String email;
}
正确修改实体后,hibernate会自动在表之间发出连接。
答案 2 :(得分:0)
我认为最简单的方法是使用教师实体作为主要实体并应用sqlRestriction来过滤此表。 我认为你不能直接从Students课程中使用标准和限制,因为你要检索的是教师实体,而且这个方向教师没有映射 - >学生。
我认为这对你有用:
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) )