diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/AbstractDaoImpl.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/AbstractDaoImpl.java index ee6b543..a07d9b5 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/AbstractDaoImpl.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/AbstractDaoImpl.java @@ -5,6 +5,8 @@ import java.util.List; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @@ -12,9 +14,10 @@ import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.EntityAccessor; public abstract class AbstractDaoImpl implements IDao { + protected final Logger log = LoggerFactory.getLogger(getClass()); + @Autowired protected EntityManager entityManager; - private final Class entityClass; public AbstractDaoImpl(Class entityClass) { diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDaoImpl.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDaoImpl.java index b929796..487fa7b 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDaoImpl.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDaoImpl.java @@ -37,27 +37,44 @@ public class ClubEventDaoImpl extends AbstractDaoImpl implements Club @Override public void addPersons(ClubEvent event, Collection updated) { List added = new ArrayList<>(updated); + List removed = new ArrayList<>(); + Set current = event.getPersons(); - Set persons2 = event.getPersons(); - if (persons2 != null) { - added.removeAll(persons2); + if (current != null) { + for (Person p : current) { + if (added.contains(p) == false) { + removed.add(p); + } + } + added.removeAll(current); } else { - persons2 = new HashSet<>(); - event.setPersons(persons2); + current = new HashSet<>(); + event.setPersons(current); for (Person p : updated) { event.add(p); } } - Query insertQuery = entityManager.createNativeQuery( - "INSERT INTO clubevent_has_person (clubevent_id, person_id) VALUES (:eventId,:personId)"); - for (Person p : added) { - insertQuery.setParameter("eventId", event.getId()); - insertQuery.setParameter("personId", p.getId()); - insertQuery.executeUpdate(); - + if (!added.isEmpty()) { + Query insertQuery = entityManager.createNativeQuery( + "INSERT INTO clubevent_has_person (clubevent_id, person_id) VALUES (:eventId,:personId)"); + for (Person p : added) { + insertQuery.setParameter("eventId", event.getId()); + insertQuery.setParameter("personId", p.getId()); + insertQuery.executeUpdate(); + } + } + if (!removed.isEmpty()) { + Query deleteQuery = entityManager.createNativeQuery( + "DELETE FROM clubevent_has_person WHERE clubevent_id=:eventId AND person_id=:personId"); + for (Person p : removed) { + deleteQuery.setParameter("eventId", event.getId()); + deleteQuery.setParameter("personId", p.getId()); + deleteQuery.executeUpdate(); + } } - persons2.addAll(added); + current.addAll(added); + current.removeAll(removed); } @Override