极度反感用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两次查询,代码多,效率低。

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

290

被折叠的 条评论
为什么被折叠?



