我正在尝试使用JPA将数据更新到mySQL数据库。我没有问题持久化数据,但刷新将无法按预期工作。我检索登录会话的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";
}
}
答案 0 :(得分:2)
merge()
持续所有实体的状态。不仅仅是非空字段。我不是,你会抱怨你想要将一些字段设置为null并且merge()
忽略它并保持原样。
所以从数据库中获取一个实体并修改它,而不是只获取它的ID,从头开始创建一个新的实体实例,只设置它的一些字段。
请注意,如果您获得实体并在单个事务中修改它,您甚至不必调用merge()
:新状态将自动保持持久。