Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA-在设置值和持久化之前刷新已删除的实体_Java_Jpa_Persistence_Entitymanager - Fatal编程技术网

Java JPA-在设置值和持久化之前刷新已删除的实体

Java JPA-在设置值和持久化之前刷新已删除的实体,java,jpa,persistence,entitymanager,Java,Jpa,Persistence,Entitymanager,我有一个已删除的实体,希望设置一些值。但在此之前,我想刷新实体,以确保拥有来自数据库的最新数据。我想出了这个密码。在设置一些新值之前,它会合并并刷新我的实体 问题是,这会创建一个新对象。有没有更好更简单的方法来归档 @Entity public class MyEntity{ public void setValueAndPersist(){ EntityManager em = ... em.getTransaction().begin();

我有一个已删除的实体,希望设置一些值。但在此之前,我想刷新实体,以确保拥有来自数据库的最新数据。我想出了这个密码。在设置一些新值之前,它会合并并刷新我的实体

问题是,这会创建一个新对象。有没有更好更简单的方法来归档

@Entity
public class MyEntity{


    public void setValueAndPersist(){

        EntityManager em = ...

        em.getTransaction().begin();

        MyEntity newEntity = em.merge(this);

        em.refresh(newEntity);

        newEntity.setSomeVal("someVal");

        em.commit();
    }
}

使用自己的类与数据库交互。不要在实体本身中执行此操作!

解决方案1: 您可以对当前对象使用
@Version
。当它不是最新版本并且您试图合并它时,会出现异常。

解决方案2: 您可以使用
find(…)


使用当前项中的类和ID从DB(或持久性上下文,如果其中已经存在)加载实际状态。

如果您知道该实体存在于该DB中,则可以查找它:
MyEntity entity=em.find(MyEntity.class,这里的主键)然后更新值-即-跳过合并/刷新直到现在才知道通过@Version进行乐观锁定。非常有用的答案!