hibernate 多表关联查询 HQL 查询语句?

J2EE 码拜 10年前 (2015-04-13) 1130次浏览 0个评论
 

查询出 A表的  ID 和 NAME
查询出 B表的所有字段
查询出 C表的 salary

该三个表都通过 ID 关联

A表的主键是 ID
B表的主键是 ID 和修改时间
C表的主键是 ID 和 修改时间 和修改次数

求写一条 HQL语句?
我几点不理解的地方 求大神指点。有道理即给分

多表关联的时候hbm.xml关联的时候而且多主键的时候应该怎么处理,注意哪里
可以直接用A表的 ID many-to-one其他两个表的ID吗?

hql查询出来的结果 怎么接收呢。
接收的这个对象要把查询出来的三个表的字段全部加一起new个新class么?

有道理即给分  谢谢

hibernate 多表关联查询 HQL 查询语句?
你只要配置好了a表和其他两个表的关系,然后直接查询a表就可以获得关联的所有数据。没有你想象的那么复杂,你应该是没有理解hibernate的作用,建议你去找一个例子来做一下比较容易理解
hibernate 多表关联查询 HQL 查询语句?
使用联合抓取,如果三张表有联系 
比如A B C ,B中含A的外键   C中含B的外键 
hql比如:from  C c  join fech c.bb b join fetch b.aa a where  a.id=1
如果是结果是一条记录的话,就用C c来接收
如果是多条的话,就用List<C>来接收。
hibernate 多表关联查询 HQL 查询语句?
<class name="" table="busin_name" > 
 <composite-id name="comp_id" class="po的名称"> 
 <key-property name="id" column="id" type="java.lang.Long" length="10" /> 
 <key-property name="business_id" column="business_id" type="java.lang.Long" length="10" /> 
 </composite-id> 
 <many-to-one name="a" class="a" update="false" insert="false" > 
 <column name="id " /> 
 </many-to-one> 
 <many-to-one name="b" class="b" update="false" insert="false" > 
 <column name="business_ID" /> 
 </many-to-one> 
 </class>

一个小范例,联合主键的写法

hibernate 多表关联查询 HQL 查询语句?
引用 2 楼 real_tecent 的回复:

使用联合抓取,如果三张表有联系 
比如A B C ,B中含A的外键   C中含B的外键 
hql比如:from  C c  join fech c.bb b join fetch b.aa a where  a.id=1
如果是结果是一条记录的话,就用C c来接收
如果是多条的话,就用List<C>来接收。

请问HQL 应该如何书写呢。查询 一个表的所有数据和另一个表的部分字段

hibernate 多表关联查询 HQL 查询语句?
查询部分字段的话可以在select * from table 在select 和 from 之间列出你要的字段就可以
hibernate 多表关联查询 HQL 查询语句?
引用 4 楼 dietime1943 的回复:

引用 2 楼 real_tecent 的回复:使用联合抓取,如果三张表有联系 
比如A B C ,B中含A的外键   C中含B的外键 
hql比如:from  C c  join fech c.bb b join fetch b.aa a where  a.id=1
如果是结果是一条记录的话,就用C c来接收
如果是多条的话,就用List<C>来接收。

……

Hibernate HQL 查询POJO部分字段
在使用Hibernate的时候,有时候并不想将对象的所有字段都查询出来,尤其是对象在数据库中的数据比较大时,(比如存储一些图片或者二进制文件,因为特殊的业务需求,必须这样存),在使用对象的时候,并不是用这些lob字段,就不想将这些字段一起查询出来,可以在domain域的对象中加上想查询字段的构造函数,然后hql语句使用select new Object(构造字段) from Object where 条件;
注意,在查询时,在from 后加上 from User as u,在构造函数中使用 u.name,u.等等。条件语句也是。

public class User(){
String id;
String name;
String age;
String image;

public User(String id,String name,String age){
this.id = id;

}
}

如果只想查询部分字段,HQL语句这样写:

String hql = “select new User(u.id,u.name,u.age) from User as u where u.id = ?”;

hibernate 多表关联查询 HQL 查询语句?
引用 6 楼 real_tecent 的回复:

引用 4 楼 dietime1943 的回复:
引用 2 楼 real_tecent 的回复:使用联合抓取,如果三张表有联系 
比如A B C ,B中含A的外键   C中含B的外键 
hql比如:from  C c  join fech c.bb b join fetch b.aa a where  a.id=1
如果是结果是一条记录的话,就用C c来接收
如果是多条的话,就用List<……

我理解你的意思了,还有个不是很清楚的地方 如果是多表的话

select new( A.ID,A.NAME,B.salary
c.xxx,c.xxxx…)….

是不是要在pojo中写个新的class其中包括所有查询中的所有字段呢
只能这么写么?

hibernate 多表关联查询 HQL 查询语句?
引用 4 楼 dietime1943 的回复:

引用 2 楼 real_tecent 的回复:使用联合抓取,如果三张表有联系 
比如A B C ,B中含A的外键   C中含B的外键 
hql比如:from  C c  join fech c.bb b join fetch b.aa a where  a.id=1
如果是结果是一条记录的话,就用C c来接收
如果是多条的话,就用List<C>来接收。

……

人家写的不就是hql吗

hibernate 多表关联查询 HQL 查询语句?
用原生SQL行吗
hibernate 多表关联查询 HQL 查询语句?
引用 8 楼 hnsy_ys 的回复:

引用 4 楼 dietime1943 的回复:
引用 2 楼 real_tecent 的回复:使用联合抓取,如果三张表有联系 
比如A B C ,B中含A的外键   C中含B的外键 
hql比如:from  C c  join fech c.bb b join fetch b.aa a where  a.id=1
如果是结果是一条记录的话,就用C c来接收
如果是多条的话,就用List<……

这条hql语句就是查询出 A,BC表的所有数据了吗?

hibernate 多表关联查询 HQL 查询语句?
好久没逛论坛了,一看好多问题。。
如果要实现你那种要求的话,我感觉直接在hql里面写最简单的就行了,比如下面的例子

//当不是查询全字段,或者是从两张表中联合查询数据时,返回的是一个数组:

        Session session = HibernateSessionFactory.getSession();

 

        Query query = session.createQuery("select a.id,b.title,b.username from A as a,B b");
        //这里的A,B依然是对象
        List list = query.list();//这里每一行都是一个1维数组

        for(int i=0;i<list.size();i++)

        {

            Object []o = (Object[])list.get(i);  //转型为数组

            int id = (Integer)o[0];  //和select中顺序的类型相对应,可以是类

            String title = (String)o[1];

            String username = (String)o[2];

            System.out.println("id:"+id+" , "+"title"+title+" , "+username);

        }

        HibernateSessionFactory.closeSession();

 

查询结果集的大小

(Integer)session.createQuery(“select count(*) from User”).iterate().next();
不知道可不可以帮助你,要是还是不行,恕老夫无能为力了。。。。

hibernate 多表关联查询 HQL 查询语句?
如果实在不行,试试session.createSQLQuery(“sql语句”)
hibernate 多表关联查询 HQL 查询语句?
70分
参考下下面的语句吧,大体上和SQL类似

select?
?????????
student0_.id?as?id1_0_,??????????
course2_.id?as?id4_1_,??????????
student0_.Sno?as?Sno1_0_,??????????
student0_.Sname?as?Sname1_0_,??????????
student0_.Sdept?as?Sdept1_0_,?
student0_.Sage?as?Sage1_0_,??????????
student0_.Ssex?as?Ssex1_0_,??????????
student0_.Saddress?as?Saddress1_0_,??????????
course2_.Cno?as?Cno4_1_,??????????
course2_.Cname?as?Cname4_1_,??????????
course2_.Ccredit?as?Ccredit4_1_?????
from?
?????????
joblog.student?student0_?????
left?outer?join??????????
sc?course1_?
??????????????
on?student0_.id=course1_.sno?????
left?outer?join?
?????????
joblog.course?course2_?
??????????????
on?course1_.cno=course2_.id?????where?
????????
?student0_.Sname=""李XXX""
hibernate 多表关联查询 HQL 查询语句?
让集团发邮件过来吧

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明hibernate 多表关联查询 HQL 查询语句?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!