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?您好,是的,我指定了。