我的mysql数据库中有两个表:
1.teacher(id(pk),name,phone,email)
2.student(id(pk),teacher'sid(FK),name,phone,email)学生表有一个外键,即教师的‘sid,它指向teacher.id。
我想选择id(teachers.id)与( 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;
}我可以通过以下方式选择他的名字是"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标准Api。
提前感谢!
发布于 2012-08-20 19:01:51
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-20 17:57:31
您的Hibernate实体类没有正确反映表之间的关系。Student实体应该类似于
@Entity
class student {
@Id
int id;
teacher teach;
String name;
String phone;
String email;
}一旦您正确地修改了实体,hibernate就会自动发出表之间的连接。
发布于 2012-08-20 17:58:18
我认为最简单的方法是使用teacher实体作为主实体,并应用sqlRestriction来过滤这个表。我认为你不能直接从学生类中使用标准和限制,因为你要检索的是教师实体,而在这个方向上没有映射,teacher,->,student。
我认为这对你来说是可行的:
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) )https://stackoverflow.com/questions/12035152
复制相似问题