Java JPA:从DB而不是持久性上下文获取数据
我有一个简单的用户帐户应用程序,用户可以在其中更改其详细信息 更新数据库 接受表单参数并调用服务方法的托管Bean方法: 服务方式: 从数据库获取数据Java JPA:从DB而不是持久性上下文获取数据,java,jpa,Java,Jpa,我有一个简单的用户帐户应用程序,用户可以在其中更改其详细信息 更新数据库 接受表单参数并调用服务方法的托管Bean方法: 服务方式: 从数据库获取数据 @PostConstruct public void init(){ userService = new UserService(); sessionController.setAuthUser(userService.read(getAuthUser().getId())); originCity = getAuthUs
@PostConstruct
public void init(){
userService = new UserService();
sessionController.setAuthUser(userService.read(getAuthUser().getId()));
originCity = getAuthUser().getUserDetail().getOriginCity();
residenceCity = getAuthUser().getUserDetail().getResidenceCity();
occupation = getAuthUser().getUserDetail().getOccupation();
birthDate = DateUtil.getStringDate(getAuthUser().getUserDetail().getBirth());
description = getAuthUser().getUserDetail().getDescription();
}
问题是这段代码的行为不同。有时我会得到想要的结果:一旦我提交了新的详细信息并调用@PostConstruct init()
,新的详细信息就会打印出来。在其他一些情况下,即使数据库条目已更新,也会打印旧的详细信息
结论:有时JPA会给我带来与DB不同的结果。我猜这个结果由来自持久性上下文的数据组成,这些数据没有更新。有没有一种方法可以确保JPA总是直接从DB获取数据?还是我缺少了什么?你是说有没有办法在操作前关闭缓存或清空缓存
emf.getCache().evictAll();
如果您使用的是JPA 2,那么您的实体定义上的
@Cacheable(false)
应该使它每次都从数据库中读取。谢谢!但这是一种好的做法吗?我认为这个缓存有它自己的角色。排除它是个好主意,还是我用错了JPA?
@PostConstruct
public void init(){
userService = new UserService();
sessionController.setAuthUser(userService.read(getAuthUser().getId()));
originCity = getAuthUser().getUserDetail().getOriginCity();
residenceCity = getAuthUser().getUserDetail().getResidenceCity();
occupation = getAuthUser().getUserDetail().getOccupation();
birthDate = DateUtil.getStringDate(getAuthUser().getUserDetail().getBirth());
description = getAuthUser().getUserDetail().getDescription();
}
emf.getCache().evictAll();