gpt4 book ai didi

mysql - 为什么JPA中的persist会清除表行中的现有数据?

转载 作者:行者123 更新时间:2023-11-29 08:08:10 29 4
gpt4 key购买 nike

我正在尝试使用 JPA 将数据更新到 mySQL 数据库。我在保留数据方面没有问题,但刷新不会按预期工作。我检索登录 session 的 id,设置该 id(它是主键)以及设置我想要合并到数据库的描述字段。我通过这个方法逐行调试,所有变量都包含预期值。如有任何解决此问题的想法或建议,我们将不胜感激。

    public String update() {
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
EntityManager em = factory.createEntityManager();


if(true){
em.getTransaction().begin();

String sessionEmail=Util.getEmail();
//Create query to find user passwords matching the inputted name
Query myQuery = em.createQuery("SELECT u FROM BusinessAccount u WHERE u.email=:email");
myQuery.setParameter("email", sessionEmail);
List<BusinessAccount> accounts=myQuery.getResultList();
int intId=accounts.get(0).getId();
businessAccount.setId(intId);
String des=businessAccount.getDescription();
businessAccount.setDescription(des);
em.flush();
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO,
"User Registration Successful!", null));
return "success";
}

else {
addMessage(new FacesMessage(FacesMessage.SEVERITY_ERROR,
"User Registration Failed!", null));
return "failure";
}
}

最佳答案

merge() 保留实体的所有状态。不仅仅是非空字段。如果不是,您会提示您想将某些字段设置为 null,而 merge() 会忽略它并保持原样。

因此,从数据库中获取一个实体并对其进行修改,而不是仅获取其 ID,从头开始创建一个新的实体实例并仅设置其部分字段。

请注意,如果您获取实体并在单个事务中修改它,您甚至不必调用 merge():新状态将自动持久化。

关于mysql - 为什么JPA中的persist会清除表行中的现有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22313119/

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