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

来源:互联网 发布:openstreetmap数据 编辑:程序博客网 时间:2024/05/22 10:22

极度反感用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以实体类未关联的用法,欢迎指正,补充。

0 0
原创粉丝点击