如果是内连接的多表查询可以不用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个人都查出来。
相关推荐
本文主要讨论的是内连接(INNER JOIN)和左外连接(LEFT OUTER JOIN)两种类型,并结合实际例子进行详细讲解。 内连接(INNER JOIN)返回两个表中匹配的行。这意味着只有当第一个表的某行与第二个表的某行有匹配的...
对于多表连接,Criteria API 可以通过 JoinType 类型的 JOIN 方法实现,如 INNER JOIN、LEFT JOIN 等。 **分页查询** 在大数据量的场景下,分页查询是必不可少的,它可以提高用户体验并减少服务器负载。Hibernate ...
Hibernate支持多种连接类型,包括`inner join`(内连接)、`left outer join`(左外连接)、`right outer join`(右外连接)和`full join`(全连接)。`with`关键字用于提供额外的连接条件,类似于SQL中的`on`关键字...
在Java持久化框架Hibernate中,关系映射是数据库关系模型在对象模型中的体现,它允许我们将数据库的表间关系转换为对象间的关联。本文将深入探讨三种主要的关系映射类型:一对一(One-to-One)、多对一(Many-to-One...
- **左外连接(Left Outer Join)**:除了返回两个表中满足连接条件的记录外,还会返回左表中不满足连接条件但右表中不存在匹配项的记录。 - **右外连接(Right Outer Join)**:除了返回两个表中满足连接条件的...
* left outer join(左外连接) * right outer join(右外连接) * full join(全连接,并不常用) 语句 inner join、left outer join 以及 right outer join 可以简写。例如:from Cat as cat join cat.mate as ...
HQL支持四种类型的连接:inner join(内连接)、left outer join(左外连接)、right outer join(右外连接)和full join(全连接)。简写形式如`join`和`left join`也是允许的。`fetch`连接用于一次性初始化相关联...
- 支持不同类型的连接:内连接(`inner join`)、左外连接(`left outer join`)、右外连接(`right outer join`)、全连接(`full join`)。 ### 8. `select`子句 - `select`子句用于指定查询结果中包含的对象和...
4. ** Criteria API的Join操作**: 支持多表查询,包括内连接(inner join)、左连接(left join)等。 5. **Criteria API的Projections**: 用于结果集的投影,例如获取平均值、计数等。 **四、事务管理** 1. **...
这里使用了`LEFT JOIN FETCH`关键字来实现迫切左外连接,它会确保即使在`Department`中没有对应的`Employee`,也会返回所有的`Department`对象,并且每个`Department`对象的`Employee`集合都会被初始化,包含了所有...
HSQL支持的连接类型包括inner join、left outer join、right outer join和full join。例如: from Formula form full join form.parameter param 4. FETCH连接 HSQL还支持FETCH连接,用于将关联的对象或一组值的...
在处理一对多关联查询时,我们可能会遇到内连接(JOIN)和左连接(LEFT JOIN)。`JOIN`会返回两个表中存在匹配的所有记录,而`LEFT JOIN`会返回所有左侧表的记录,即使右侧表没有匹配的记录。 在HQL中,我们可以...
- **RIGHT JOIN:** 直接在HQL中使用`RIGHT JOIN`语法,但由于Hibernate不支持直接的`RIGHT JOIN`语法,可以使用`LEFT JOIN`加上额外的条件来模拟`RIGHT JOIN`的效果: ```java String hql = "FROM UserInfo u ...
left join Department as department on employee.DepNo = department.ID ``` 左连接会返回所有员工记录,即使他们在`Department`表中没有对应的记录也会显示为`null`。 3. **右连接**: ```hql select ...
在Hibernate中,针对关联对象的检索,有三种主要的检索策略:立即检索(Eager Fetching)、延迟检索(Lazy Fetching)和迫切左外连接检索(Anxious Left Join Fetching)。下面将详细探讨这三种策略的特点。 #### 1. 立即...
6. **连接查询**:通过JOIN关键字,可以处理多表关联查询,包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。 7. **子查询**:在SELECT或WHERE子句中使用子查询,提供更灵活的...
- **连接查询**:INNER JOIN、LEFT JOIN等。 #### 4.2 Criteria API - **标准查询**:设置查询条件、排序等。 - **动态查询**:根据实际需求动态构建查询条件。 ### 五、性能优化 #### 5.1 缓存机制 - **一级缓存...
Hibernate提供了多种联表查询方式,如:`JOIN`, `LEFT JOIN`, `RIGHT JOIN`, `FULL JOIN`等,这些都可以通过HQL(Hibernate Query Language)或者Criteria API来实现。 4. **Hibernate的HQL查询** HQL是Hibernate...
2. 在多对多关系的情况下,需要使用 left join 或 inner join 来连接实体类。 3. 使用 where 子句可以过滤出特定的数据。 4. 在 HQL 语句中,使用 join 子句可以连接多个实体类。 5. 在多对多关系的情况下,需要使用...
- **左外连接**:`left outer join`允许在左侧实体未找到匹配项时返回null值,例如`left outer join cat.kittens as kitten`。 - **右外连接**:`right outer join`与左外连接相反,如果右侧实体未找到匹配项,则...