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

 

posted @ 2017-08-09 15:58  不平凡#i  阅读(2063)  评论(0编辑  收藏  举报