diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/CalendarTaskRefresher.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/CalendarTaskRefresher.java index afd4924..ccef4a3 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/CalendarTaskRefresher.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/CalendarTaskRefresher.java @@ -2,9 +2,12 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.business; import java.util.List; +import javax.validation.ConstraintViolationException; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataIntegrityViolationException; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -27,8 +30,18 @@ public class CalendarTaskRefresher { public void synchronizeCalendarTasks() { List events = business.loadEvents(null, true); for (ClubEvent e : events) { - log.trace("try storing {}", e); - dao.save(e); + if (dao.get(e.getId()) != null) { + try { + log.trace("try inserting {}", e); + dao.save(e); + } catch (ConstraintViolationException | DataIntegrityViolationException ex) { + log.warn("Insert failed, updating {}", e); + dao.update(e); + } + } else { + log.trace("try updating {}", e); + dao.update(e); + } log.debug("successfully stored {}", e); } } 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 99a4a57..3a9df70 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 @@ -11,7 +11,7 @@ import org.springframework.transaction.annotation.Transactional; public abstract class AbstractDaoImpl implements IDao { @Autowired - EntityManager em; + protected EntityManager em; private final Class entityClass; @@ -23,16 +23,20 @@ public abstract class AbstractDaoImpl implements IDao { @Override @Transactional public void save(T obj) { - // EntityTransaction tx = em.getTransaction(); - // tx.begin(); - // try { em.persist(obj); - // tx.commit(); - // } catch (Exception e) { - // tx.rollback(); - // } } + @Override + @Transactional + public T update(T obj) { + return em.merge(obj); + } + + @Override + public T get(Object primaryKey) { + return em.find(entityClass, primaryKey); + } + @Override public List list() { diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/IDao.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/IDao.java index b485d3f..beadcaa 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/IDao.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/IDao.java @@ -5,5 +5,7 @@ import java.util.List; public interface IDao { void save(T obj); + T update(T obj); List list(); + T get(Object primaryKey); }