С Коллекции Eclipse (ранее коллекции GS ) будет работать метод removeIf
, определенный на MutableCollection :
MutableList list = Lists.mutable.of(1, 2, 3, 4, 5);
list.removeIf(Predicates.lessThan(3));
Assert.assertEquals(Lists.mutable.of(3, 4, 5), list);
С синтаксисом Java 8 Lambda это можно записать следующим образом:
MutableList list = Lists.mutable.of(1, 2, 3, 4, 5);
list.removeIf(Predicates.cast(integer -> integer < 3));
Assert.assertEquals(Lists.mutable.of(3, 4, 5), list);
Необходим вызов Predicates.cast()
, потому что по умолчанию removeIf
метод был добавлен на интерфейс java.util.Collection
в Java 8.
Примечание: я являюсь коммиттером для коллекций Eclipse .
Persist
предназначен для новых объектов переходного процесса, и он терпит неудачу, если идентификатор уже назначен. Вероятно, вы должны называть saveOrUpdate
вместо persist
.
В качестве альтернативы вы можете проверить, содержится ли объект в вашем диспетчере сущностей, и если это так
entityManager.merge(yourObject);
, else
entityManager.persist(yourObject);
Основная проблема заключается в том, что вы загружаете объекты в один DAO:
boutique = daoAdmin.namedQuerySingle(
Boutique.LOAD_BOUTIQUE_BY_IDWEBSC, fluxBoutique.getId());
Но затем сохраняя их с помощью другого:
boutiqueDao.persist(boutique);
В случае существующих сущностей это будет генерировать ошибку отдельного объекта, поскольку объект имеет идентификатор, но не существует в единице работы второго DAO. Конечно, даже если вы использовали один и тот же DAO для чтения / сохранения, вы все равно столкнетесь с проблемами, потому что вы не должны использовать persist
для сохранения существующих объектов. Попробуйте это вместо:
boutique = boutiqueDAO.namedQuerySingle (Boutique.LOAD_BOUTIQUE_BY_IDWEBSC, fluxBoutique.getId ()) ;
if (boutique==null) {
log.error("Dans le new");
boutique = new Boutique();
boutiqueDAO.persist(boutique);
}
boutique.setIdWebSC(fluxBoutique.getId());
boutique.setDateModification(new Date());
boutique = boutiqueDao.merge(boutique);