Hibernate hql关联查询问题

有2张表 discuss和post post的主键postid作为外键在discuss中 discuuss与post多对一的关系

对应2个实体类Discuss和Post Discuss中 用Posts post 并在xml中做了关系映射
现在我想根据指定的Postid来找到响应的discuss记录 然后不知道该怎么写了
1.from Discuss as dis where dis.post.postid=?
2.select dis from Discuss as dis inner join dis.post as pos with pos.postid=?
网上查资料第一种好像不正确 但不知道为什么不能这么用
第二种不知道正不正确 总感觉有问题 牵扯到hibernate的关系映射就迷迷糊糊的 望大神指点

7个回答

你可以通过第一种查询查到相应的discuss,如果你没有关闭延时加载,你取不出post的数据,在你需要用post的数据的时候还要再用discuss里面的postid到pos表里面再查询一次。
如果你关闭了延时加载则不需要

hpp201220180206
-天朝- 看错了,不可以用对象去查
大约 5 年之前 回复
hpp201220180206
-天朝- 回复阿瓦的期望: 用hibernate框架后我们的hql实际是通过映射过来的持久化实体类去操作数据表,而不是直接去操作数据表
大约 5 年之前 回复
hpp201220180206
-天朝- 回复阿瓦的期望: 是的,前提是关闭延时加载。
大约 5 年之前 回复
u011461064
noMathNoPain 还有一个问题 嘿嘿 hql中能不能直接用对象来查询例如:from Discuss as dis where dis.post=? 我直接给个Post对象行不行- -感觉不太科学
大约 5 年之前 回复
u011461064
noMathNoPain 回复阿瓦的期望: 相应....
大约 5 年之前 回复
u011461064
noMathNoPain 我看了有关延迟加载的资料,如果我用1的语句成功得到了discuss实例 继续用discuss.getPost()也是能取得post实例的吧 hibernate会自动根据外键帮我查找响应的对象吧?
大约 5 年之前 回复

还有我在书上看到的许多示例中 配置关系映射后都没写 直接是 "from Discuss dis inner join dis.post pos "sql中 join连接不都要写on条件吗
这里是不是默认了 idscuss.postid=post.postid作为连接条件的

u011461064
noMathNoPain 掉了字 :配置关系映射后都没写 连接条件
大约 5 年之前 回复
u011461064
noMathNoPain 这个我看过 你能回答我上面的问题吗? 谢谢
大约 5 年之前 回复
u011461064
noMathNoPain 谢谢。
大约 5 年之前 回复

第一个是没有问题的,但是想要立即取出post数据就必须关闭延时加载,如果不关延时加载的话就要两次查询了

1.from Discuss as dis where dis.post.postid=?这个?你传进来的postid值,指定你获取那些数据
2.select dis from Discuss as dis inner join dis.post as pos with pos.postid=?这里应把with pos.postid=? 改成on pos.postid=dis.postid

strutce
丵鹰 回复阿瓦的期望: 可以,但前面就不用写inner join 直接用,就可以了
大约 5 年之前 回复
u011461064
noMathNoPain 这里用where代替on 也是可以的吧
大约 5 年之前 回复

select dis from Discuss as dis inner join dis.post as pos on pos.postid=dis.postid where dis.postid=?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问