2016-10-11 3 views
1

У меня есть иерархия классов, сопоставленная с таблицами DB, например A->B->C. A содержит первичный ключ и B/C ссылается на него для своих строк. Я сохраняю объект C. Таким образом, Hibernate создаст запись для A, затем B и C. Это верно? (Я не использую транзакции). Я использую Hibernate 3.2.6 GA.Сессия спящего режима сохраняется асинхронно?

Вопрос: это synchronous или asynchronous? Я предположил, что он будет синхронным, поэтому он не вернется, прежде чем все эти строки будут сохранены. Однако кажется, что даже если он вернется, какая-то таблица все еще обновляется. Так, например, если я запрошу объект C после его сохранения, я получаю состояние для A и B, но получаю пустое состояние для C. Никакая ошибка не возвращается нигде, и когда я вручную проверяю БД, все данные там правильно видны.

+0

Не могли бы вы поделиться каким-то кодом? – Gernot

+0

Это проприетарный, поэтому нельзя делиться. Мне очень жаль. – shrini1000

ответ

1

В данном случае это синхронно. В основном, асинхронное поведение обрабатывается самой картой. Разработчики, пытающиеся реализовать асинхронное поведение, могут привести к непредсказуемым результатам. Если вы не видите обновленные ожидаемые свойства, проверьте код и соответствующий sql, сгенерированный спящим режимом.

Кроме того, asynchonous означает, что hibernate будет обновлять некоторые объекты и синхронизировать их в один проход с базой данных. Это никогда не означает, что части данных обновляются в разное время. Такое поведение приведет к несогласованному состоянию базы данных.

Смежные вопросы