JPA Hibernate запрос выполнения запроса внутри транзакции - PullRequest
1 голос
/ 29 апреля 2019

Является ли порядок выполнения запросов в транзакции всегда одинаковым с порядком вызова метода 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");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...