Я работаю с вашим типичным трехслойным приложением, которое имеет слой презентации, бизнес-уровень и слой DAO. Это веб-приложение Java, которое использует Spring MVC, Spring Security и управление транзакциями Spring из бизнес-уровня. Он взаимодействует с базой данных Oracle 10g.Родительский ключ не найден - Управление транзакциями весны
У меня есть метод бизнес-уровня, называемый createDepartment. Внутри этого метода я делаю два вызова слоя DAO для создания отдела и создания позиции для этого отдела. Каждый раз, когда я это делаю, я получаю исключение родительского ключа, если не предпринимается попытка создать позицию. Если я перемещаю createPosition до уровня представления (вне управления транзакциями), он работает.
Я могу дублировать это в SQL-разработчике Oracle. Если я создаю отдел, я не могу увидеть этот отдел, пока не закрою соединение и не получу новый, поэтому я могу понять, почему позиция не может быть создана. Что отличает его от большинства вложений SQL, так это то, что приложение использует функцию безопасности ярлыков Oracle, и всем отделам присваивается метка. Поэтому, когда создается отдел, создается новый ярлык.
Как я могу сделать отдел видимым в соединении, которое он использует для его создания?
Я хочу упомянуть, что создание метки является неявным фиксацией. Я точно не знаю, как это влияет на управление транзакциями. –