Фон
У меня есть система Java / Spring, где транзакции управляются вручную через пользовательский HandlerInterceptor. То есть:
- в начале каждого запроса открывается транзакция (неудачной частью системы является то, что любой запрос может привести к записи в БД)
- экземпляр EntityManager присоединяется к транзакции
- менеджер сущностей используется для загрузки измененных сущностей. EntityManager отслеживает все изменения
- в конце каждого запроса EntityManager сбрасывается и фиксируется
Да, это не идеально, но я не создал эту систему, и она достаточно проста, чтобы позволить нам работать в ее рамках - я не собираюсь менять ее без веской причины.
Я не привык к поведению фиксации всех отслеживаемых сущностей на флеше и поэтому делал что-то вроде:
//change entity
if(ovalValidator.isValid(entity))
em.persist(entity);
Мне нужно исправить это, чтобы работать с моим новым пониманием, и переключение вышеупомянутого на это, кажется, работает:
//change entity
if(!ovalValidator.isValid(entity))
em.detach(entity);
Мой вопрос
Насколько я понимаю, это просто удаляет объект из очереди очистки, даже если он помечен как грязный. Это правильно? Есть ли лучший способ достичь того, что я пытаюсь (не сохранять изменения в этой сущности)? Есть ли что-то, на что мне нужно обратить внимание, если я делаю это?