Я ищу красноречивый способ удаления нескольких объектов внутри транзакции.Удалить с помощью операции HQL с откатом
Учитывая список идентификаторов, я хотел бы создать исключение, если количество затронутых строк отличается от количества списков. В настоящее время я использую ниже фрагмент кода, но она включает в себя много шаблонных:
private int deleteMyEntities(final List<Integer> ids) {
final Session session = SomeHelper.getOpenSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
final int affectedCount = session.createQuery("delete MyEntity where id in (:ids)")
.setParameterList("ids", ids)
.executeUpdate();
if (affectedCount == ids.size()) {
tx.commit();
tx = null;
return affectedCount;
} else {
throw new HibernateException("Delete count does not match target count.");
}
} finally {
if (tx != null) {
tx.rollback();
}
}
}
несколько подводных камней:
- Это наследие приложение не хватают инъекций зависимостей, аннотаций привода сделок и других тонкостей. Ответы, подобные «Использовать весну», не являются исключительно полезными.
- Скомпилируем java 1.6.
чем проблема с этим кодом? – developer
Существует тонна шаблона. Это работает, это просто уродливо – Andreas
Вместо объекта MyEntity создайте DTO с только полем id –