gpt4 book ai didi

java - JPA:从数据库获取数据而不是持久性上下文

转载 作者:行者123 更新时间:2023-12-02 07:59:41 26 4
gpt4 key购买 nike

我有一个简单的用户帐户应用程序,用户可以在其中更改他的详细信息。

更新数据库

托管 Bean 的方法采用表单参数并调用 Service 方法:

public String changeDetails(){
Date date = DateUtil.getDate(birthDate);
Integer id = getAuthUser().getId();
UserDetail newDetails = new UserDetail(id, occupation, date, originCity, residenceCity, description);

EntityTransaction transaction = getTransaction();
userService.updateDetail(newDetails);
transaction.commit();

return null;
}

服务方式:

public boolean updateDetail(UserDetail newDetails) {
boolean ok = true;
if (newDetails != null) {
UserDetail user = readDetail(newDetails.getId());

user.setOccupation(newDetails.getOccupation());
user.setOriginCity(newDetails.getOriginCity());
user.setResidenceCity(newDetails.getResidenceCity());
user.setBirth(newDetails.getBirth());
user.setDescription(newDetails.getDescription());
}
return ok;
}

从数据库中获取数据

@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 给我带来的结果与数据库中的结果不同。我猜想这个结果由来自持久性上下文的数据组成,这些数据未更新。有没有一种方法可以确保 JPA 始终直接从数据库获取数据?还是我遗漏了什么?

最佳答案

如果您使用 JPA 2,则实体定义上的 @Cacheable(false) 应使其每次都从数据库读取。

关于java - JPA:从数据库获取数据而不是持久性上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9102112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com