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
JPA合并:不确定以下两种方法中哪一种更好。我的数据丢失了_Jpa_Merge_Loss - Fatal编程技术网

JPA合并:不确定以下两种方法中哪一种更好。我的数据丢失了

JPA合并:不确定以下两种方法中哪一种更好。我的数据丢失了,jpa,merge,loss,Jpa,Merge,Loss,我不确定是将对象设置为合并的结果,然后返回该结果,还是只进行合并。我在下面的第一块中使用了这种技术,但有时会丢失数据,我不知道为什么 @Override public T save(T object) { EntityManager em = null; EntityTransaction tx = null; try { em = getEntityManager(); tx = em.getTransaction();

我不确定是将对象设置为合并的结果,然后返回该结果,还是只进行合并。我在下面的第一块中使用了这种技术,但有时会丢失数据,我不知道为什么

@Override
public T save(T object) {
    EntityManager em = null;
    EntityTransaction tx = null;
    try {
        em = getEntityManager();
        tx = em.getTransaction();
        tx.begin();

        object = em.merge(object);
        tx.commit();
        return object;
    } catch (RuntimeException e) {
        log.severe(e.getMessage());
        if (tx != null && tx.isActive()) {
            tx.rollback();
        }
        throw e;
    } finally {
        if (em != null && em.isOpen()) {
            em.close();
        }
    }
}
或者我应该这样做合并

@Override
public void save(T object) {
    EntityManager em = null;
    EntityTransaction tx = null;
    try {
        em = getEntityManager();
        tx = em.getTransaction();
        tx.begin();

        object = em.merge(object);
        tx.commit();

    } catch (RuntimeException e) {
        log.severe(e.getMessage());
        if (tx != null && tx.isActive()) {
            tx.rollback();
        }
        throw e;
    } finally {
        if (em != null && em.isOpen()) {
            em.close();
        }
    }
}

使用top方法后,传入的对象可能会被修改,然后再进行另一次保存。此对象与其他实体具有一对一和一对多关系。有时,一对多实体之一中的数据丢失或未保存。但是我不能可靠地重现这个问题。

你真的需要合并吗,在序列化对象时通常使用合并,如果你不需要序列化对象,你可能不需要合并。如果您从同一个EntityManager查询对象,只需更改它们,然后提交。

您是否在@OneToMany注释中指定了CascadeType.MERGE/ALL?您好,是的,我指定了。