DreamH

hibrenate @ManyToOne(fetch = FetchType.EAGER) 和 lazy 区别

项目中在spring定时器中定时扫描订单想修改订单详细和会员信息时老是报错,说no session。。。但是在正常的后台操作action中又能用。

对hibernate一直不是很熟悉,只知道用。

如果是EAGER,那么表示取出这条数据时,它关联的数据也同时取出放入内存中 

如果是LAZY,那么取出这条数据时,它关联的数据并不取出来,在同一个session中,什么时候要用,就什么时候取(再次访问数据库)。 

但是,在session外,就不能再取了。用EAGER时,因为在内存里,所以在session外也可以取。 

一般只在一边设Eager,JPA接口默认为一对多为Lazy,多对一为Eager,但是Hibernate反向工程生成Entity时,多对一为Lazy,需要手动改为Eager。 

而两边都设Eager,那么代码中取一条记录时,会发2次SQL。

posted on 2013-12-09 10:41  DreamH  阅读(899)  评论(0编辑  收藏  举报