读书人

Hibernate 急切左外连接 left join fe

发布时间: 2012-09-18 16:21:42 作者: rapoo

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;
??
?}

读书人网 >编程

热点推荐