Является ли порядок выполнения запросов в транзакции всегда одинаковым с порядком вызова метода jpa в коде?
У меня есть сущность Element
и сущность Order
.
На сущности Order
у меня есть отношение @ManyToOne
, которое является однонаправленным.
В таблице Order
имеется ссылка FK на таблицу Element
, но в сущности Element
нет отношения OneToMany
к порядку.
Метод deleteElement
начинается с вызова метода для удаления всего порядка элемента (elementService.deleteOrderElement(element);
он вызывается для дифференциала EJB
).
Затем удаляет сам элемент entityManager.remove(element);
.
Моя проблема в том, что иногда в рабочей среде я получаю ошибку нарушения внешнего ограничения, как если бы запрос delete element
был вызван до запросов delete order
.
Возможно ли, что Hibernate просто перепутает запросы, поскольку существует только однонаправленная передача?
Мне не удалось воспроизвести ошибку в тестовой среде.
Это извлечение кода метода. Фактический метод более сложен, но это критическая часть.
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void deleteElement(Set<Long> elementIds,String utente) {
.....
Long id = null;
Iterator<Long> it = idDpi.iterator();
while (it.hasNext()) {
Element element =entityManager.find(Element.class, it.next());
...
elementService.deleteOrderElement(element);
....
entityManager.remove(element );
log.debug("Aggiorna tabella auditing - rimozione dpi");
}
}