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:用具有相同id的对象替换数据库中的对象_Java_Jpa_Persistence - Fatal编程技术网

Java JPA:用具有相同id的对象替换数据库中的对象

Java JPA:用具有相同id的对象替换数据库中的对象,java,jpa,persistence,Java,Jpa,Persistence,我正在尝试根据用户所做的更改更新数据库中的一行。我向数据库管理器传递了一个Lesson对象,现在我需要更新数据库中的对象,使其与传递的对象的属性相匹配 我觉得有比我现在想的更好的方法。我的猜测是通过id获取对象,将其所有属性设置为新值,然后提交它。但是由于id参数与changedLes.getId()相同,因此感觉覆盖旧的DB条目可能更容易。然而,我不知道如何做到这一点,如果这是正确的做法 void update(ClubLes changedLes, int id) { try {

我正在尝试根据用户所做的更改更新数据库中的一行。我向数据库管理器传递了一个Lesson对象,现在我需要更新数据库中的对象,使其与传递的对象的属性相匹配

我觉得有比我现在想的更好的方法。我的猜测是通过id获取对象,将其所有属性设置为新值,然后提交它。但是由于id参数与changedLes.getId()相同,因此感觉覆盖旧的DB条目可能更容易。然而,我不知道如何做到这一点,如果这是正确的做法

void update(ClubLes changedLes, int id) {
     try {
        GenericDaoJpa.openPersistency();
        Clubles les = em.find(ClubLes.class, id);
        em.getTransaction().begin();
        //setters? eg les.setName(changedLes.getName())
        em.getTransaction().commit();
        GenericDaoJpa.closePersistency();
    } catch (NoResultException e) {
        GenericDaoJpa.closePersistency();
        throw new NoResultException("Les could not be modified! try again!");
    }
}

我正在使用自动生成的密钥,所以我不确定这是否会导致问题。

要更新实体,您需要执行以下操作

em.merge(entity);
em.flush();


这会照顾到现有实体吗?或者我还需要做其他事情吗?它将检查id以更新实体,如果实体不存在,它将创建一个新实例,请参阅