Для синхронизации и получения идентификаторов, созданных с помощью БД, я чувствую принуждение звонить по телефону EntityManager.flush()
в нескольких местах.Когда НЕ использовать EntityManager.flush()?
Последствия, связанные с последствиями, есть причины не для звонка flush()
?
Другими словами, существует ли какая-либо наблюдаемая разница для вызывающего метода моего (DAO, ...), если он делает/не flush()
?
Мой сценарий находится в контексте структуры поддержки наших разработчиков JPA. Я бы предоставил некоторые функции, которые могут или не нуждаются в flush()
где-то в глубине иерархии вызовов. Будет ли пользователь этих функций знать, если/когда происходит промывка, или это частная деталь реализации без заметного эффекта для вызывающего?
«Запрос объекта через его состояние, а не запросы JPA» - Что вы подразумеваете под «JPA-запросами»? 'em.find (...)', в отличие от 'em.createQuery (...)'? – JimmyB
@ Ханно - Да точно.Запрос должен ударить по базе данных, и если есть ожидающее изменения в форме состояния грязного объекта, тогда возникнет несогласованность, если синхронизация будет выполнена с опозданием. – Shailendra
Я думаю, что мы добираемся до важного момента здесь: даже если я никогда не буду скрывать явно, поставщик JPA может решить/должен сфотографироваться в некоторых точках, в зависимости от того, например. о том, какие запросы я выполняю и/или насколько провайдер может избежать попадания в БД с запросом на чтение. Таким образом, по сути, это в основном не предсказуемо, когда в последовательности операций чтения/записи произойдет неявный флеш. Из этого я заключаю, что я тоже могу создать флеш в любой момент, который я нахожу подходящим, не нарушая какого-либо контракта JPA. – JimmyB