Как остановить автоматическую фиксацию в EJB-JPA tx - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть EBJ без сохранения состояния, и я использую JPA для управления взаимодействиями с базой данных.Ниже приведен сценарий, в котором мне нужна ваша помощь.

  1. EJB получил вызов для выборки данных (getCustomer ()).
  2. GetCustomer используется для чтения сущности Customer из базы данных с использованием JPA.
  3. У сущности клиента есть метод для удаления пробелов из атрибутов.который аннотируется @PostLoad.В основном это изменяет сущность в контексте постоянства.

Теперь, когда ответ отправляется клиенту (после завершения транзакции), он запускает обновление SQL для базы данных, чтобы обновить набор данных (измененный на шаге 3).

Если вы видите эту операцию, она предназначена только для чтения.Но так как в моих данных много пробелов, я должен обрезать их внутри объекта.Но этот подход запускает обновление SQL, которое не ожидается.

Не могли бы вы сообщить мне лучший подход для устранения этой проблемы или как изолировать и синхронизировать) EJB tx и JPA tx.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Нет необходимости связываться с управлением транзакциями, чтобы выполнить ваше требование.

Ваш код должен вызвать javax.persistence.EntityManager.clear () перед возвратом из вашей DAO.Это отсоединит ваш объектный компонент от контекста постоянства, который больше не будет его отслеживать.Из документа java:

Очистите контекст персистентности, в результате чего все управляемые объекты будут отключены.Изменения, внесенные в объекты, которые не были сброшены в базу данных, не будут сохранены.

0 голосов
/ 20 декабря 2018

Вы можете объявить, что ваш getCustomer () не поддерживает транзакции:

@TransactionAttribute(NOT_SUPPORTED)
public Customer getCustomer()

Подробнее о транзакциях в руководстве по Java EE: https://docs.oracle.com/javaee/7/tutorial/transactions003.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...