如果是内连接的多表查询可以不用join关键字,在where里面关联,与sql一样,如:
" select ehrtonc from EHRTONCPO ehrtonc , NCTOEHRPO nctoehr where nctoehr.ffgcid = :payprocessid and nctoehr.hroid = ehrtonc.oid"
Hibernate left join一直是困扰我的一个问题,因为对hibernate的关联映射不怎么了解,写的Hql也全部是从sql翻译过来,虽然也是大同小异,但是left join 和join总报错Path expected for join!。所以一直是不用join关键字进行关联,但是遇到left join就只能用sql写了,影响效率。
其实很简单:
1、先把关联映射配好(必须配置好关联关系才能在sql中用join关键字)
User.hbm.xml
<hibernate-mapping package="com.xieqing.crm.user">
<class name="User" table="tbl_user">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="truename" not-null="true" column="truename" length="32"/>
<property name="sex" column="sex" length="1"/>
<property name="phone" column="phone"/>
<property name="roomId" column="room_id" not-null="false"/>
<many-to-one name="room" class="com.xieqing.crm.room.Room" column="room_id"
insert="false" update="false"/>
</class>
</hibernate-mapping>
Room.hbm.xml
<hibernate-mapping package="com.xieqing.crm.room">
<class name="Room" table="tbl_room">
<id name="id" column="room_id">
<generator class="native"></generator>
</id>
<property name="roomName" not-null="true" column="room_name" length="32"/>
<set name="users">
<key column="room_id"></key>
<one-to-many class="com.xieqing.crm.user.User" not-found="ignore"/>
</set>
</class>
</hibernate-mapping>
User.java
public class User{
private Integer id;
private String truename;
private String phone;
private int sex;
private Integer roomId;
private Room room;
// 省略Getter setter方法
}
Room.java
public class Room {
private Integer id;
private String roomName;
private Set<User> users;
// 省略Getter setter方法
}
tbl_user 表
tbl_room 表
// 注意:这里连接的就是User.java里的room属性了, 改了这里就OK啦。如果后面要加条件就
用with (SQL是用的on)
String hql = "select u from User u left join u.room";(关联哪个列就得xml里面配置关联)
List<User> userList = this.getHibernateTemplate().find(hql).list();
System.out.println("size----"+userList.size());
for(User u : userList) {
System.out.println(u.getId() + " --- " + u.getTruename());
}
执行该查询将把tbl_user表中的4个人都查出来。
相关推荐
设置在 hibernate.cfg.xml文件中,hibernate与数据库的连接
hibernate的查询方式介绍和hibernate的批处理和连接池配置hibernate
在Hibernate中配置Proxool连接池
NULL 博文链接:https://chaoyi.iteye.com/blog/2151605
Hibernate 多表连接分页查询示范项目 Hibernate Criteria 多表连接 分页
hibernate连接数据库的连接配置。包括oracle等一系列配置。
Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP 在配置连接池时需要注意的有三点: 一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在...
Hibernate2和Hibernate3连接池配置.doc
hibernate配置连接池大全 hibernate配置连接池大全
Hibernate的三种连接池设置C3P0、Proxool和DBCP. 详细说明及配置方法 Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP.
hibernate的学习资料,以及连接池和二级缓存
hibernate配置数据库连接池的三种方法(数据库连接池的概念)
介绍了Hibernate中几种连接池以及他们怎么使用
Hibernate 下配置连接池解决多连接的问题
Hibernate 一对一连接表单向关联 Hibernate 一对多外键单向关联 Hibernate 一对多连接表单向关联 Hibernate 多对一外键单向关联 Hibernate 多对一连接表单向关联 Hibernate 多对多单向关联 Hibernate 一对一外键双向...
hibernate分页查询 数据库连接,不错的分析,可以尝试下载易用。。
Hibernate表关系总结(一对一,多对一,多对多,单向,双向),有具体实例代码
Hibernate连接SQLite配置步骤: 1、添加SQLite库: 1.1、将两个jar包:com.zy.hibernate.dialect.SQLiteDialect.jar、sqlite-jdbc-3.7.2.jar拷贝到“\WEB-INF\lib”文件夹下; 2、配置hibernate: 2.1、将...
整合网络上关于数据库连接池的资料,结合hibernate对常用数据库连接池进行整合
Hibernate不同数据库的连接及SQL方言