在JPA中更新实例的ID

时间:2016-03-10 18:02:23

标签: jpa sql-update entitymanager identifier

我正在使用JPA注释(hibernate实现),我想通过合并它来更改实体的ID。有任何注释或解决方案可以避免重复然后删除实体吗?

2 个答案:

答案 0 :(得分:2)

使用JPA是不可能的,原因很充分:

  • 您是否从持久性上下文中删除了一个实体并且您想要重新附加它,如果您删除了建立连接的唯一方法,它怎么可能连接到它被修改的原始行?好吧,让我们假设我们存储原始id并尝试从那里开始,但是现在因为id是可修改的,所以0保证它在被分离的时候也没有被其他进程改变,这使得我们存储的原始id无用,导致完全混乱。

你可以做一些变通办法:

  • 使用本机查询修改行
  • 不要将此列用作主键,而是创建一个包含生成序列的新列
  • 重复然后删除实体,如您所说的完全有效且安全,因为它在同一交易中

答案 1 :(得分:0)

您可以使用JPQL在jpa中更改实体的ID,如下例所示:

public void updateUsername(User userToUpdate,String newUserName) {
EntityManager manager=ConnectionDao.getConnecting();
User user=find(userToUpdate.getUsername()); 
manager.getTransaction().begin();
manager.createQuery("update User u set u.username=\'"+newUserName+"\'").executeUpdate();
manager.getTransaction().commit();
 return;
}