diff --git a/server/src/main/java/envoy/server/data/PersistenceManager.java b/server/src/main/java/envoy/server/data/PersistenceManager.java index d2e1f22..c79296b 100755 --- a/server/src/main/java/envoy/server/data/PersistenceManager.java +++ b/server/src/main/java/envoy/server/data/PersistenceManager.java @@ -341,15 +341,36 @@ public final class PersistenceManager { } private void persist(Object obj) { - transaction(() -> entityManager.persist(obj)); + try { + transaction(() -> entityManager.persist(obj)); + } catch (EntityExistsException e) { + if (transaction.isActive()) + transaction.rollback(); + EnvoyLog.getLogger(PersistenceManager.class).log(Level.WARNING, + String.format("Could not persist %s: entity exists already.", obj)); + } } private void merge(Object obj) { - transaction(() -> entityManager.merge(obj)); + try { + transaction(() -> entityManager.merge(obj)); + } catch (IllegalArgumentException e) { + if (transaction.isActive()) + transaction.rollback(); + EnvoyLog.getLogger(PersistenceManager.class).log(Level.WARNING, + String.format("Could not merge %s: entity doesn't exist.", obj)); + } } private void remove(Object obj) { - transaction(() -> entityManager.remove(obj)); + try { + transaction(() -> entityManager.remove(obj)); + } catch (IllegalArgumentException e) { + if (transaction.isActive()) + transaction.rollback(); + EnvoyLog.getLogger(PersistenceManager.class).log(Level.WARNING, + String.format("Could not remove %s: entity didn't exist (for the database).", obj)); + } } /**