Как прочитать измененные значения с помощью собственного запроса во время одной транзакции?(Весна и JPA) - PullRequest
1 голос
/ 15 июня 2010

У нас есть контейнерная транзакция с Spring и JPA (Hibernate).Мне нужно обновить таблицу, чтобы пометить некоторые строки с помощью собственных операторов.Затем мы вставляем несколько строк через EntityManager из JPATemplate в эту таблицу.После этого нам нужно вычислить изменения в таблице с помощью нативного оператора (с объединением и минусом Oracle, комплексными группами ...)

Я вижу, что изменения с шага 1 и 2 не зафиксированы, и поэтому операторс 3 не получается.Я уже пробовал с распространением транзакции REQUIRES_NEW, EntityManager.flush ... Не работает.

1) update SOMETABLE acolumn = somevalue (native)
2) persist some values into SOMETABLE (via entity manager)
3) select values from SOMETABLE

Есть ли возможность прочитать изменения с шага 1 и 2 на шаге 3?

1 Ответ

1 голос
/ 16 июня 2010

Я предполагаю, что вы используете те же DataSource в JpaTransactionManager, JdbcTemplate и JpaTemplate и включили @Transactional с этим:

<tx:annotation-driven />

Если предположить, что это не ошибка конфигурации, я думаю, вы вызываете метод @Transactional из метода того же класса?

В этом случае вам нужно, чтобы AspectJ вплетал в логику транзакции или рефакторинг кода, чтобы метод @Transactional находился в другом классе, чем вызывающий метод. (Опция рефакторинга является простой и предпочтительной)

Если это не решит вашу проблему, вы должны добавить соответствующие классы к вашему вопросу вместе с соответствующими сообщениями журнала.

...