你只要配置好了a表和其他两个表的关系,然后直接查询a表就可以获得关联的所有数据。没有你想象的那么复杂,你应该是没有理解hibernate的作用,建议你去找一个例子来做一下比较容易理解
解决方案 »
- ajax如何发送请求到action中?
- 关于quartz配置问题
- SpringMVC成功返回以后怎么获取commandClass对象中的某个属性
- hql处理count sum 产生别名的错误
- strus2.0怎么把action中返回的List放到作用域
- java IntelliJ IDEA ?
- 急求java处理ms-sql的问题,在线等!!!快快快
- eclipse断点的原理是什么?
- 关于三层开发中,用户如输入错误抛出空指针问题
- 请求帮助class文件在执行中的问题
- 用过的一个实用的JAVA代码生成,要的就来拿!【有图有真相,来迟了别后悔】
- 我们爱分享----关于 Criteria 轻量级查询框架的设计与思路 探讨
比如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>来接收。
<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的时候,有时候并不想将对象的所有字段都查询出来,尤其是对象在数据库中的数据比较大时,(比如存储一些图片或者二进制文件,因为特殊的业务需求,必须这样存),在使用对象的时候,并不是用这些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 = ?";
我理解你的意思了,还有个不是很清楚的地方 如果是多表的话select new( A.ID,A.NAME,B.salary
c.xxx,c.xxxx...)....是不是要在pojo中写个新的class其中包括所有查询中的所有字段呢
只能这么写么?
这条hql语句就是查询出 A,BC表的所有数据了吗?
如果要实现你那种要求的话,我感觉直接在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();
不知道可不可以帮助你,要是还是不行,恕老夫无能为力了。
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'