请教一个hql语句

youhere1 2008-06-16 06:06:28
刚刚学HEBIRNATE,有个语句现在要用,但书上没有例子.
所以向大家请教了,关于联合查询.我用的sqlserver2000.
简化的话就是如下:
一个表叫tb_User,有两个列,id int型(主键), name varchar型.
另一个表叫tb_VipUser,有两个列,id int型(主键),vipState varchar型.
tb_User的主键是tb_VipUser的主键的外键.
程序知道name,要查tb_VipUser.
sql语句是
select * from tb_VipUser v where v.id=(select id from tb_User where name = ?);
或者是
select tb_VipUser from tb_VipUser v inner join
tb_User u on v.id=u.id where u.name=?
现在要的是hql语句.



...全文
165 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bufeng711 2008-06-17
  • 打赏
  • 举报
回复
只要映射文件生成对应的主外键的 one-to-many 和many-to-one 
然后在<many-to-one> 里面加个 lazy="false"

hql = "from VipUser vu wehre vu.userOwner.name=?"; 这么写就行
他会自动去找你的子表 配置文件对应字段写好就行,你的配置文件如果的自动生成
应该是关联了一个从表的对象,一直get取就行
KOOK_OKKO 2008-06-16
  • 打赏
  • 举报
回复

Query query1=session.createQuery("from VipUser v where v.id=(select id from User where name = ?)");
query1.setString(0,name);
List VipUserList1=query1.list();
for (Iterator iterator = VipUserList1.iterator(); iterator.hasNext();) {
VipUser vuer1 = (VipUser) iterator.next();
System.out.println(Vuer1.getName());
}




直接这样不行吗?
jdlsfl 2008-06-16
  • 打赏
  • 举报
回复
from tb_VipUser v where v.tb_User.id=v.id and v.tb_User.name=?
Shine_Panda 2008-06-16
  • 打赏
  • 举报
回复
从你的表的关系 tb_VipUsr 应该有个外键id 对应你的tb_User
所以你的 tb_vipUser应该对应的实体类中应该有个属性User userOwner (我随便取的)

所以你的hql = "from VipUser vu wehre vu.userOwner.name=?";
更多hibernate的查询参看:
http://blog.csdn.net/caoyinghui1986/archive/2008/06/15/2549386.aspx
senny925 2008-06-16
  • 打赏
  • 举报
回复
from tb_VipUser v inner join tb_User u on v.id=u.id where u.name=?
其中tb_VipUser 是hibernate从数据库中把对应的表名生成的javaBean
KKK2007 2008-06-16
  • 打赏
  • 举报
回复

67,512

社区成员

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

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