我需要使用JPA查询语法(JPQL)更改列的值,我该怎么做?
这是我检索我想要更新的行的方式:
@PersistenceContext
private EntityManager em;
public Role activateUser(long id) {
Query query = em
.createQuery("SELECT r.id FROM Role r WHERE r.id=" + id);
Role tmpRole = (Role) query.getSingleResult();
tmpRole.setAccountStatus(AccountStattus.ACTIVATED.toString());
//How can i create query to save the changes here?)
return tmpRole;
}
还有其他替代方法可以修改该行而不先检索它吗?
从性能的角度来看,您认为最佳方法是什么?
答案 0 :(得分:2)
以JPA方式使用JPA:
1)加载实体,然后将其附加到当前事务。 2)更改实体 3)提交交易
事务处理可以通过@Transactional完成,但Java EE 5/6还有很多其他方法可以做到这一点。
@PersistenceContext
private EntityManager em;
//@Transactional - Not Java EE, anyway I keep it as notice that the method is invoked in a transaction.
public Role activateUser(long id) {
Role role = em.find(Role.class, id);
role.setAccountStatus(AccountStattus.ACTIVATED.toString());
//Thats all.
}
答案 1 :(得分:0)
A
em.flush
后
tmpRole.setAccountStatus(AccountStattus.ACTIVATED.toString());
应该足够了。我记得,只要一个bean由EntityManager管理(这里就是这种情况),所有的更改都会自动反映出来。
如果这不起作用,那么可以试试
tmpRole.setAccountStatus(AccountStattus.ACTIVATED.toString());
em.merge(tmpRole);
编辑: 顺便说一句,找到角色你也可以写
em.find(Role.class, id);
如果您已正确映射Role类中的ID。