オブジェクトをマージの結果に設定してから返す必要があるのか 、それとも単にマージする必要があるのか わかりません。以下の最初のブロックの手法を使用していますが、時々データが失われ、その理由がわかりません。
@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 メソッドが使用された後、渡されたオブジェクトが変更され、別の保存が行われる場合があります。このオブジェクトには、他のエンティティとの 1 対 1 および 1 対多の関係があります。1 対多のエンティティのいずれかのデータが失われたり、保存されなかったりすることがあります。しかし、問題を確実に再現することはできません。