【Hibernate】连表查询获取实体对象或者List

本文介绍了如何在Hibernate中进行连表查询,包括内连接和一般连表查询的方法,通过配置hbm.xml文件和编写HQL语句实现实体对象或List的自动注入,避免手动设置SQL查询的繁琐。

极度反感用sql查询,如果实体类变量太多,手写代码注入很麻烦,更喜欢用hibernate自动注入,但是遇到连表查询hql总是有问题,最近尝试了写了两个记录下,以防以后再用。

1.内连接

sql:

String hql = "
select icon 
      from TopicIcon as icon 
           left join icon.topic as t 
order by t.rank asc ,t.id asc 
";

hbm.xml

<many-to-one name="topic" class="com.pojo.Topic" fetch="select">
            <column name="id_topic_ti" />
</many-to-one>

2.连表查询

sql:

String hql = " 
select ct
     from Course as c , CourseContent as ct 
 where c.id = ct.course 
and c.enabled =:enabled
and ct.chapterType =:chapterType
and c.id =:id
";


CourseContent.hbm.xml:

<many-to-one name="course" class="com.pojo.Course" fetch="select">
            <column name="COURSE_ID" />
</many-to-one>
CourseContent.java

	private Long id;
	private Course course;
        private Integer chapterType;  
course.java

        private Long id;
	private Boolean enabled;


总结:内连接其实使用的左链接的方式,因为要获取表内全部数据。2中因为链表关联的是course,如果用c=ct.course或者c.id=ct.course都不可以,所以用了92语法。

1.别名一定要用as

2.查询表名、字段名一定要用java对应的类名、实例变量名字

3.如果java中是以一个类的方式关联的(比如2),关联方(CourseContent)用实例变量(course),关联类型(course)用主键id

c.id=ct.course 


虽然部分人遇到这种情况会直接用hql查询id,然后再用id in()去查询结果一样可以直接得到结果list,但是对于hibernate4版本之前的,不包括4,not in和in是有限制的,如果超过2000条内容就会报错。而且先查询id再得到结果list两次查询,代码多,效率低。

因为是在工作中遇到时间匆忙,并没有很完备,比如innner join、left join以实体类未关联的用法,欢迎指正,补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值