`
pany
  • 浏览: 90320 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate 迫切左外连接 left join fetch

阅读更多

建议在一多对关联中在"一"方用延迟加载"多"方

可以在HQL中显式的"迫切左外连接" left join fetch
这样做Hibernate可以少访问数据库,也可以用"@BatchSize(size = 5)"来减少访问数据库的次数

 

User.java 一方

 

@Entity
@Table(name = "tbl_user")
@org.hibernate.annotations.Entity(dynamicUpdate=true,dynamicInsert=true)
public class User implements Serializable{

 @Id
 @GeneratedValue(generator="gen")
 @GenericGenerator(name="gen",strategy="increment")
 @Column(name="id")
 private Integer id;

 
 /**
  * username
  */
 @Column(name="username", length=50, insertable = true, updatable = true, nullable = false)
 private String username;
 
 
 /**
  * password
  */
 @Column(name="password", length=20, insertable = true, updatable = true, nullable = false)
 private String password;
 
 
 /**
  * 创建时间
  */
 @Column(name="createtime")
 @Temporal(value=TemporalType.TIMESTAMP)
 private Date createtime;
 
 
 
 @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy = "user")
 @BatchSize(size = 5)
 private Set<Order> orders=new HashSet<Order>();


 
 /**
 * 省略get,set方法
 */

}

 

 

Order.java 多方

 

@Entity
@Table(name = "tbl_order")
@org.hibernate.annotations.Entity(dynamicUpdate=true,dynamicInsert=true)

public class Order implements Serializable{

 /**
  * id
  */
 @Id
 @GeneratedValue(generator="gen")
 @GenericGenerator(name="gen",strategy="increment")
 @Column(name="id")
 private Integer id;
 

 /**
  * orderNum
  */
 @Column(name="orderNum", length=50, insertable = true, updatable = true, nullable = false)
 private String orderNum;
 
 
 /**
  * 创建时间
  */
 @Column(name="createtime")
 @Temporal(value=TemporalType.TIMESTAMP)
 private Date createtime;
 
 
 
 @ManyToOne
 @JoinColumn(name = "userId")
 private User user;


 /**
 * 省略get,set方法
 */

 

}

 

UseerDaoImpl.java中部分代码

 public List<User> listUser(){
  
  List<User> list=this.getHibernateTemplate().find(" from User as u left join fetch u.orders ");
  
  return list;
  
 }

分享到:
评论

相关推荐

    Hibernate迫切连接和普通连接的区别实例详解

    这里使用了`LEFT JOIN FETCH`关键字来实现迫切左外连接,它会确保即使在`Department`中没有对应的`Employee`,也会返回所有的`Department`对象,并且每个`Department`对象的`Employee`集合都会被初始化,包含了所有...

    Hibernate Fetch 的作用

    例如,在上面的代码片段中,通过`left outer join fetch parent.childs`语句,我们告诉Hibernate在加载`Parent`实体时,也一并加载所有相关的`Child`实体。这样,即使`Parent`实体的`childs`属性被标记为`lazy="true...

    HQL Hibernate查询语言

    * left outer join(左外连接) * right outer join(右外连接) * full join(全连接,并不常用) 语句 inner join、left outer join 以及 right outer join 可以简写。例如:from Cat as cat join cat.mate as ...

    Hibernate HQL.doc

    HQL支持四种类型的连接:inner join(内连接)、left outer join(左外连接)、right outer join(右外连接)和full join(全连接)。简写形式如`join`和`left join`也是允许的。`fetch`连接用于一次性初始化相关联...

    HQL连接查询和注解使用总结

    - **迫切左外连接(Eager Left Outer Join)** - 语法:`left[outer]join fetch` - 描述:左外连接的迫切形式,不仅进行了左外连接,还指定了立即加载关联对象。 - 示例:`FROM Employee e LEFT OUTER JOIN FETCH...

    hibernate 框架的基础四

    - **迫切左外连接**: - 相当于Hibernate会发出一条SQL语句,将主表及其关联对象的所有信息一次性查询出来。 - 示例代码: ```java Query query = session.createQuery("FROM Order o LEFT JOIN FETCH o....

    hql语句经典教程

    这些示例分别执行内连接、左外连接和左外连接。连接类型参照ANSI SQL,包括`inner join`、`left outer join`、`right outer join`和`full join`。简写形式如`join`和`left join`也是允许的。 ### 4. `with`关键字 ...

    hsql查询语法

    HSQL支持的连接类型包括inner join、left outer join、right outer join和full join。例如: from Formula form full join form.parameter param 4. FETCH连接 HSQL还支持FETCH连接,用于将关联的对象或一组值的...

    hibernate的使用心得

    Hibernate支持多种连接类型,包括`inner join`(内连接)、`left outer join`(左外连接)、`right outer join`(右外连接)和`full join`(全连接)。`with`关键字用于提供额外的连接条件,类似于SQL中的`on`关键字...

    Hibernate_HQL大全

    例如,“JOIN cat.mate as mate”用于内连接,而“LEFT JOIN cat.kittens as kitten”则用于左外连接,以便处理可能存在空值的情况。 5. **FETCH JOIN**:FETCH JOIN是HQL的一种特殊连接类型,用于优化查询性能,...

    hibernate hql基本操作

    - **左外连接**:`left outer join`允许在左侧实体未找到匹配项时返回null值,例如`left outer join cat.kittens as kitten`。 - **右外连接**:`right outer join`与左外连接相反,如果右侧实体未找到匹配项,则...

    hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法

    hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法 Hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法是 Hibernate 框架中的一种常见问题。当我们在 Hibernate 中使用懒加载特性时,可能会遇到 ...

    Hibernate问题解决

    - **RIGHT JOIN:** 直接在HQL中使用`RIGHT JOIN`语法,但由于Hibernate不支持直接的`RIGHT JOIN`语法,可以使用`LEFT JOIN`加上额外的条件来模拟`RIGHT JOIN`的效果: ```java String hql = "FROM UserInfo u ...

    hibernate的hql语句

    连接类型包括:`inner join`(内连接)、`left outer join`(左外连接)、`right outer join`(右外连接)和`full join`(全连接)。`join`的简写形式如`from Cat as cat join cat.kittens as kitten`,简化了查询...

    hibernate关联查询

    在处理一对多关联查询时,我们可能会遇到内连接(JOIN)和左连接(LEFT JOIN)。`JOIN`会返回两个表中存在匹配的所有记录,而`LEFT JOIN`会返回所有左侧表的记录,即使右侧表没有匹配的记录。 在HQL中,我们可以...

    hibernate的n+1问题.docx

    为了解决这个问题,Hibernate提供了两种主要的检索策略:延迟检索和迫切左外连接检索。 1. **延迟检索策略**:这种策略允许我们在需要时才加载关联对象。默认情况下,Hibernate对集合关联使用的就是延迟加载。在...

    HIBERNATE HQL

    - 支持多种连接类型,包括 `inner join`(内连接)、`left outer join`(左外连接)、`right outer join`(右外连接)和 `full join`(全连接)。其中,`full join` 不太常用。 - `join` 关键字还可以简写,例如 `...

    Hibernate的学习笔记

    - 一对多关联:可以使用迫切左外连接查询,避免N+1问题。例如,通过`join fetch`进行集合的预加载。 4. **HQL查询**: - 内联接:用于筛选满足特定条件的关联对象,如`From Item i join i.bids b where ...`。 -...

    Hibernate查询语言

    HQL支持多种类型的连接,如内连接(inner join)、左外连接(left outer join)、右外连接(right outer join)和全连接(full join)。例如: ```sql from Cat as cat inner join cat.mate as mate left outer join...

    HQL语句大全

    - `left outer join`(左外连接) - `right outer join`(右外连接) - `full join`(全连接,较少使用) - **简化语法**:可以简化`inner join`和`left outer join`的写法。 - 示例:`from Cat as cat join cat...

Global site tag (gtag.js) - Google Analytics