就Hibernate的一对多根据外键查询

LavenderDestiny 2015-01-28 10:16:05
现问题如下:
学生表 sid(主键) ;sname;
老师表 tid(主键) ;tname;
在老师类中 private Set<Student> students; //对象组合
在老师的hbm.xml配置文件中配置
<set name="students" table="STUDENT">
<key>
<column name="SID" />
</key>
<one-to-many class="com.icar.entities.Student" />
</set>
第一次运行后会在服务器中自动生成两张表,在teacher表中多加了一列 SID(外键)(但是在老师类中是没有这个属性的,只是数据库中通过映射配置的外键关联自动生成的一列)
那么 若现在我有老师的tid号想查找他的所有学生。该怎样写HQL语句或者用什么方法可以达到效果呢?
...全文
580 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
水草有根 2017-10-23
  • 打赏
  • 举报
回复
还hibernate啊,抛弃多年了。mybatis才是王道。
longhanlei 2017-10-22
  • 打赏
  • 举报
回复
楼主找到解决方法了吗?怎么通过老师id查所有对应的学生呢?
  • 打赏
  • 举报
回复
引用 5 楼 LavenderDestiny 的回复:
[quote=引用 1 楼 shijing266 的回复:] 建议你反向生成,先创建数据库,然后生成实体 或者先创建实体跟配置文件,然后生成数据库(实体中自己配置属性)
反向生成有什么区别么? 现在我数据库里的Strudent表示 sid(主键),sname,老师表是tid(主键),tname,sid。但是我的老师实体类中没有sid这个属性啊,我Hql查询语句传了一个含sid的student对象过来。该怎么查?[/quote] 区别在于实现方式不同,但是结果都是一样的,你到时候 老师类里面会有学生对象,这个不用我说吧 还有,你们用过hibernate反向生成么? 或者用javaBean小工具也行 http://blog.csdn.net/wangpeng047/article/details/6877720
LavenderDestiny 2015-01-30
  • 打赏
  • 举报
回复
引用 13 楼 shijing266 的回复:
HQL 关系对象查询,利用实体对象来查询sql表 , 你现在的结果是 单纯的Teacher类、单纯的Student类,两者没关系怎么查~
有啊 <set name="students" table="STUDENT"> <key> <column name="TID" /> </key> <one-to-many class="com.icar.entities.Student" /> </set> 有一对多映射,在运行之后,会在数据库的student表自动生成一列tid,问题是我的实体类里没有这一属性,那么我要是想用hql查询语句就不知道用什么条件判断了
  • 打赏
  • 举报
回复
HQL 关系对象查询,利用实体对象来查询sql表 , 你现在的结果是 单纯的Teacher类、单纯的Student类,两者没关系怎么查~
LavenderDestiny 2015-01-30
  • 打赏
  • 举报
回复
引用 8 楼 shijing266 的回复:
[quote=引用 5 楼 LavenderDestiny 的回复:] [quote=引用 1 楼 shijing266 的回复:] 建议你反向生成,先创建数据库,然后生成实体 或者先创建实体跟配置文件,然后生成数据库(实体中自己配置属性)
反向生成有什么区别么? 现在我数据库里的Strudent表示 sid(主键),sname,老师表是tid(主键),tname,sid。但是我的老师实体类中没有sid这个属性啊,我Hql查询语句传了一个含sid的student对象过来。该怎么查?[/quote] 区别在于实现方式不同,但是结果都是一样的,你到时候 老师类里面会有学生对象,这个不用我说吧 还有,你们用过hibernate反向生成么? 或者用javaBean小工具也行 http://blog.csdn.net/wangpeng047/article/details/6877720[/quote] 这个和正反向生成应该没什么关系的,我只是要用HQL语句根据teacher的tid去查询他的学生而已。
LavenderDestiny 2015-01-30
  • 打赏
  • 举报
回复
引用 9 楼 u013972119 的回复:
[quote=引用 7 楼 LavenderDestiny 的回复:] [quote=引用 2 楼 u013972119 的回复:] 按照你的配置,应该是student表中存在外键列SID引用teacher表的主键吧。
正好相反 是 student的sid列是主键 被 teacher 表引为外键 所以teacher表中多了一个列sid[/quote] 你确定?[/quote] 好吧 ,我搞反了 是tid的主键给了student做外键。现在问题是 我有存有tid的teacher对象,要查他的学生,该怎么查啊?
LavenderDestiny 2015-01-30
  • 打赏
  • 举报
回复
引用 8 楼 shijing266 的回复:
[quote=引用 5 楼 LavenderDestiny 的回复:] [quote=引用 1 楼 shijing266 的回复:] 建议你反向生成,先创建数据库,然后生成实体 或者先创建实体跟配置文件,然后生成数据库(实体中自己配置属性)
反向生成有什么区别么? 现在我数据库里的Strudent表示 sid(主键),sname,老师表是tid(主键),tname,sid。但是我的老师实体类中没有sid这个属性啊,我Hql查询语句传了一个含sid的student对象过来。该怎么查?[/quote] 区别在于实现方式不同,但是结果都是一样的,你到时候 老师类里面会有学生对象,这个不用我说吧 还有,你们用过hibernate反向生成么? 或者用javaBean小工具也行 http://blog.csdn.net/wangpeng047/article/details/6877720[/quote] 没有用过诶,难道这种方式生成的 就不能查询吗?
Mr_sqw 2015-01-30
  • 打赏
  • 举报
回复
引用 7 楼 LavenderDestiny 的回复:
[quote=引用 2 楼 u013972119 的回复:] 按照你的配置,应该是student表中存在外键列SID引用teacher表的主键吧。
正好相反 是 student的sid列是主键 被 teacher 表引为外键 所以teacher表中多了一个列sid[/quote] 你确定?
kutala 2015-01-29
  • 打赏
  • 举报
回复
看法跟2楼一致
LavenderDestiny 2015-01-29
  • 打赏
  • 举报
回复
引用 2 楼 u013972119 的回复:
按照你的配置,应该是student表中存在外键列SID引用teacher表的主键吧。
正好相反 是 student的sid列是主键 被 teacher 表引为外键 所以teacher表中多了一个列sid
LavenderDestiny 2015-01-29
  • 打赏
  • 举报
回复
引用 3 楼 u013972119 的回复:
hql :select t.students from Teacher t where t.id = tid;
不是说HQL查询语句中没有select的么?
LavenderDestiny 2015-01-29
  • 打赏
  • 举报
回复
引用 1 楼 shijing266 的回复:
建议你反向生成,先创建数据库,然后生成实体 或者先创建实体跟配置文件,然后生成数据库(实体中自己配置属性)
反向生成有什么区别么? 现在我数据库里的Strudent表示 sid(主键),sname,老师表是tid(主键),tname,sid。但是我的老师实体类中没有sid这个属性啊,我Hql查询语句传了一个含sid的student对象过来。该怎么查?
Mr_sqw 2015-01-29
  • 打赏
  • 举报
回复
hql :select t.students from Teacher t where t.id = tid;
Mr_sqw 2015-01-29
  • 打赏
  • 举报
回复
按照你的配置,应该是student表中存在外键列SID引用teacher表的主键吧。
  • 打赏
  • 举报
回复
建议你反向生成,先创建数据库,然后生成实体 或者先创建实体跟配置文件,然后生成数据库(实体中自己配置属性)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧