Я пытаюсь сохранить много записей в одной транзакции, используя JPA (EclipseLink). Запись имеет первичный ключ, определенный в БД.Множественное нарушение ограничений на флеш и сохранение в одной транзакции
У меня есть несколько дубликатов в фиде, поэтому я знаю, что будет нарушение ограничений. Я хочу поймать исключение ограничения ограничений для одного элемента и продолжать сохранять другие.
Вот мой код:
Entity:
@Entity
@Table(name="TEST")
public class TestEntity {
@Id
private String name;
public TestEntity() {
}
public TestEntity(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Операция:
@Transactional
public void test() {
List<String> list = Arrays.asList("A", "B","C","D","D","E","F","G");//duplicated D
for(String name: list) {
try {
TestEntity entity = new TestEntity(name);
logger.info("" + entity);
entityManager.persist(entity);
logger.info("Persist done");
entityManager.flush();
logger.info("Flush done");
} catch(RuntimeException e) {
logger.warn("Entry {} was skipped due to following exception {}.", name, e.getLocalizedMessage());
}
}
logger.info("Importing dictionary finished. ");
}
В результате я получаю ограничение нарушение прав для второго D (это то, что я ожидал), но Я получаю это исключение для следующих предметов, и это то, чего я не понимаю.
Я получаю: Внутренняя Exception: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: ограничение уникальности (BBHDEV4.SYS_C0023890) нарушается
Что является причиной этой проблемы?
Вы должны удалить '@ Transactional'. Это гарантирует, что либо все будет сохранено, либо никаких изменений не будет сделано. – coladict