81,092
社区成员
发帖
与我相关
我的任务
分享
public class Person {
@Id
@GeneratedValue
private Long id;
@ManyToMany(fetch = FetchType.LAZY)
private List<Role> roles ;
}
//这是一个PersonRepsitory
public interface PersonRepsitory extends JpaRepository<Person.Long>{}
//在controller当中如何才能在getPerson函数中取出某个Person的Role的数据
@Controller
@RequestMapping("/")
public class PersonController{
@Autowired
PersonRepsitory personRepsitory;
@RequestMapping("/")
public @ResponseBody Person getPerson(){
return person;
}
}
FetchType.LAZY
是懒汉式,第一次请求的时候才会获取,FetchType.EAGER)
是饿汉式,不管是不是调用,都会第一时间加载,第一次调用的时候,数据已经加载完毕我是这么回答的,但是面试官说不正确。它给我列举了两种方法,回来找不到,估计是我没听清。。。。 最简单的就是调用一下get方法,就会加载,你需要那些熟悉,你就调用一下对象的get方法,不需要的不调用,那么返回给前端的就是你想要的。懒加载的意思就是你不主动调用get方法,就不会去数据库获取。
最简单的就是调用一下get方法,就会加载,你需要那些熟悉,你就调用一下对象的get方法,不需要的不调用,那么返回给前端的就是你想要的。懒加载的意思就是你不主动调用get方法,就不会去数据库获取。
roles属性的注解改成
@ManyToMany(fetch = FetchType.EAGER)可以么
[quote=引用 20 楼 亲爱的Joe 的回复:]
[quote=引用 18 楼 Mr906 的回复:]
[quote=引用 16 楼 亲爱的Joe 的回复:]
[quote=引用 12 楼 Mr906 的回复:]
[quote=引用 9 楼 亲爱的Joe 的回复:]
roles属性的注解改成
@ManyToMany(fetch = FetchType.EAGER)可以么
FetchType.LAZY
是懒汉式,第一次请求的时候才会获取,FetchType.EAGER)
是饿汉式,不管是不是调用,都会第一时间加载,第一次调用的时候,数据已经加载完毕[/quote][quote=引用 18 楼 Mr906 的回复:]
[quote=引用 16 楼 亲爱的Joe 的回复:]
[quote=引用 12 楼 Mr906 的回复:]
[quote=引用 9 楼 亲爱的Joe 的回复:]
roles属性的注解改成
@ManyToMany(fetch = FetchType.EAGER)可以么
FetchType.LAZY
是懒汉式,第一次请求的时候才会获取,FetchType.EAGER)
是饿汉式,不管是不是调用,都会第一时间加载,第一次调用的时候,数据已经加载完毕[/quote][quote=引用 16 楼 亲爱的Joe 的回复:]
[quote=引用 12 楼 Mr906 的回复:]
[quote=引用 9 楼 亲爱的Joe 的回复:]
roles属性的注解改成
@ManyToMany(fetch = FetchType.EAGER)可以么
FetchType.LAZY
是懒汉式,第一次请求的时候才会获取,FetchType.EAGER)
是饿汉式,不管是不是调用,都会第一时间加载,第一次调用的时候,数据已经加载完毕[/quote]感觉面试官问的是OpenSessionView的使用方式。
hibernate 允许 延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 Web 层访问到那些需要延迟加载的数据时,由于加载领域对象的 Hibernate Session 已经关闭,这些导致延迟加载数据的访问异常。
这里就需要配置OpenSessionInViewFilter ,使得懒加载的属性在controller中得以获取
[quote=引用 12 楼 Mr906 的回复:]
[quote=引用 9 楼 亲爱的Joe 的回复:]
roles属性的注解改成
@ManyToMany(fetch = FetchType.EAGER)可以么
FetchType.LAZY
是懒汉式,第一次请求的时候才会获取,FetchType.EAGER)
是饿汉式,不管是不是调用,都会第一时间加载,第一次调用的时候,数据已经加载完毕[/quote]
@ManyToMany(fetch = FetchType.EAGER)可以么
[quote=引用 4 楼 Mr906 的回复:]
[quote=引用 2 楼 stacksoverflow 的回复:]
一般情况下:
首先,数据库的connection是在service中管理的,所以service可以控制事务的提交。
对数据库实体类的懒加载,也就是在使用的时候再去数据查数据。
如果使用的地方在service之外,比如controller,那数据的connection就得不到了。
所以,不建议在service以外使用懒加载。
或者说根本不建议使用懒加载,
或者说不建议对数据库的实体类做代理,因为被代理的实体类在编程的过程中会逃到哪里很难控制,甚至会逃到页面上,而对这种代理类的操作好多人自己都不知道在操作什么,风险太大。
有getRoles方法就好办了,你调用person.getRoles().size()就可以了
延时加载就是你用到的时候才会加载,你调用person.getRoles()还是没用用到它,所以你再调用一下size()或List的其他方法就可以了
[quote=引用 2 楼 stacksoverflow 的回复:] 一般情况下: 首先,数据库的connection是在service中管理的,所以service可以控制事务的提交。 对数据库实体类的懒加载,也就是在使用的时候再去数据查数据。 如果使用的地方在service之外,比如controller,那数据的connection就得不到了。 所以,不建议在service以外使用懒加载。 或者说根本不建议使用懒加载, 或者说不建议对数据库的实体类做代理,因为被代理的实体类在编程的过程中会逃到哪里很难控制,甚至会逃到页面上,而对这种代理类的操作好多人自己都不知道在操作什么,风险太大。