首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate标准:从具有外键关系的两个表中选择?

Hibernate标准:从具有外键关系的两个表中选择?
EN

Stack Overflow用户
提问于 2012-08-20 17:25:33
回答 3查看 11.9K关注 0票数 1

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

代码语言:javascript
运行
复制
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“)相同的教师。

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

代码语言:javascript
运行
复制
@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“的学生:

代码语言:javascript
运行
复制
Criteria q = session.createCriteria(student.class).add(
                Restrictions.eq("name", "stevens"));

怎样才能找回“史蒂文”的老师?就像这样

代码语言:javascript
运行
复制
(select * from teacher(where teacher.id = student.teachersid(where student.name="stevens")))

,但使用Hibernate标准Api。

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-20 19:01:51

代码语言:javascript
运行
复制
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();

希望这能对你有所帮助。如果你有任何问题,请告诉我。

票数 6
EN

Stack Overflow用户

发布于 2012-08-20 17:57:31

您的Hibernate实体类没有正确反映表之间的关系。Student实体应该类似于

代码语言:javascript
运行
复制
@Entity
class student {
@Id
int id;
teacher teach;
String name;
String phone;
String email;
}

一旦您正确地修改了实体,hibernate就会自动发出表之间的连接。

票数 0
EN

Stack Overflow用户

发布于 2012-08-20 17:58:18

我认为最简单的方法是使用teacher实体作为主实体,并应用sqlRestriction来过滤这个表。我认为你不能直接从学生类中使用标准和限制,因为你要检索的是教师实体,而在这个方向上没有映射,teacher,->,student。

我认为这对你来说是可行的:

代码语言:javascript
运行
复制
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) )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12035152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档