hibernate及时加载与延迟加载问题,很纠结,高手赐教啊! 有三个实体:用户、单位和角色,使用hibernate的建立关联关系,单位和用户一对多,用户和角色是一对多;用户实体里及时加载他所属单位和拥有的角色;创建修改用户信息时,用户及时加载单位和角色,方便操作;用户登录时,及时加载单位和角色方便于权限控制;但是存在一个问题,就是其他开发人员需要获取用户列表时(只需要查询用户信息),也及时加载单位和角色信息,肯定影响效率,怎么办,您能不能帮我分析一下啊?先谢谢啦! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 User.java@ManyToOneDepartment depart;@OneToManySet<Role> roles;都设置为lazy加载1、创建修改用户信息时,用户及时加载单位和角色 1.1 创建用户信息时,肯定是没有单位的和角色的,因此实际上对于单位和角色是需要分别单独select 1.2 修改用户信息时,也只是把User中的depart和roles拿出来,这里你使用延迟还是立即都没多大影响。延迟的话,对于User是一个select 对于user.depart也是一个select对于user.roels这个多少要看你的批量查询的设置是多少了,你只需要设置@BatchSize(size = 20)的大小就可以,这个根据你系统的一个用户最大有多少个角色配置就行了,那么如果配置合理的话也是一个select;如果是理解加载的话,其实是一样的。为什么?lazy只不是是在要用的时候采取查询,如果永远不使用user.depart那么这个查询depart的select就会省略,而立即是管你用不用都给你select出来。2、用户登录时,及时加载单位和角色方便于权限控制 这个就不解释了,跟1.2一样。3、其他开发人员需要获取用户列表时(只需要查询用户信息)由于你的主查询表设置为user并将其中的关联对象的获取配置为lazy那么你就没必要操心这个问题。只要在你查询的User对象中,你不使用user.depart或者user.roels,那么查询depart的select和查询roels的select就不会执行。所以么…… oxcow,你好!org.hibernate.LazyInitializationException: could not initialize proxy - no Session。我按照你说的将及时加载配置成延迟加载,当使用user.roles和user.company时报出上面异常! 你可以看下http://hi.baidu.com/362217990/blog/item/4c4aabee2b9cf5e6ce1b3ea4.html Spring 3.x MVC找个详细的资料比登天还难 org.jnp. 面试问题 My97DatePicker的显示问题 保存登录用户信息的问题. 想把SQL语句从JAVA代码里剥离,该怎么处理? xml文件不能解析 javascript中常用函数? 初学者关于soap和java服务器的问题,高分求教 let's encrypt ssl证书问题!!!!!!!!!!! strust2 package name属性 那位高手给解释下? primefaces中selectOneMenu转换器的问题,请教大侠
Department depart;
@OneToMany
Set<Role> roles;都设置为lazy加载1、创建修改用户信息时,用户及时加载单位和角色
1.1 创建用户信息时,肯定是没有单位的和角色的,因此实际上对于单位和角色是需要分别单独select
1.2 修改用户信息时,也只是把User中的depart和roles拿出来,这里你使用延迟还是立即都没多大影响。延迟的话,对于User是一个select 对于user.depart也是一个select对于user.roels这个多少要看你的批量查询的设置是多少了,你只需要设置@BatchSize(size = 20)的大小就可以,这个根据你系统的一个用户最大有多少个角色配置就行了,那么如果配置合理的话也是一个select;如果是理解加载的话,其实是一样的。为什么?lazy只不是是在要用的时候采取查询,如果永远不使用user.depart那么这个查询depart的select就会省略,而立即是管你用不用都给你select出来。
2、用户登录时,及时加载单位和角色方便于权限控制
这个就不解释了,跟1.2一样。3、其他开发人员需要获取用户列表时(只需要查询用户信息)
由于你的主查询表设置为user并将其中的关联对象的获取配置为lazy那么你就没必要操心这个问题。只要在你查询的User对象中,你不使用user.depart或者user.roels,那么查询depart的select和查询roels的select就不会执行。所以么……
org.hibernate.LazyInitializationException: could not initialize proxy - no Session。我按照你说的将及时加载配置成延迟加载,当使用user.roles和user.company时报出上面异常!
你可以看下http://hi.baidu.com/362217990/blog/item/4c4aabee2b9cf5e6ce1b3ea4.html