hibernate注解fetch = FetchType.EAGER,

/**
  * 自关联  父节点
  */
 @ManyToOne(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER, targetEntity = NodeLevel.class)
 @JoinColumn(name = "pId", nullable = true)  
 private NodeLevel parentNodeLevel;

 

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

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

 

如果是hibernate

这东西叫延迟加载,意思就是当lazy为false的时候,你在加载机构树形结构第一层的同时会把树的所有数据都一起加载至内存,在session关闭后也可以使用这些数据,而当lazy为true时,那加载树的第一层时则不去加载整个树的数据,只有当你用到时才去加载,我估计你的问题是去读取下一级机构时,session已经关了,不信你可以看看你报的异常里是不是有关lazy的信息

 

lazy代表延时加载,lazy=false,代表不延时,如果对象A中还有对象B的引用,会在A的xml映射文件中配置b的对象引用,多对一或一对多,不延时代表查询出对象A的时候,会把B对象也查询出来放到A对象的引用中,A对象中的B对象是有值的.如果lazy=true,代表延时,查询A对象时,不会把B对象也查询出来,只会在用到A对象中B对象时才会去查询,默认好像是false,你可以看看后台的sql语句的变化就明白了,一般需要优化效率的时候会用到.

文章出自:http://blog.csdn.net/sunqing0316/article/details/43852501

 

转载于:https://www.cnblogs.com/monogo/p/7325824.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值