Как установить переменные сеанса базы данных в Hibernate? - PullRequest
0 голосов
/ 13 марта 2020

При использовании Hibernate и JPA у меня есть существующий абстрактный класс DAO, который настраивает менеджер сущностей следующим образом:

@PersistenceContext(unitName = "<name>")
private EntityManager entityManager;

И в некоторых методах он используется следующим образом:

public ObjectType findByPrimaryKey(int id) {
    return entityManager.find(ObjectType, id);
}

Я хотел установить параметр конфигурации базы данных в той же транзакции, что и запрос "найти". Тем не менее, я не могу найти внутреннюю транзакцию, которую использует entityManager. Я написал Aspect, который проверяет аннотацию Transactional и устанавливает там переменную, и добавил @Transactional поверх метода findByPrimaryKey, но он все еще не установлен в сеансе.

Есть ли здесь что-то неправильное или другой способ сделать это? В идеале нужно устанавливать специальную переменную перед каждым запросом.

1 Ответ

0 голосов
/ 15 апреля 2020

Конечным решением было объединить аннотацию Spring «@Transactional», которая автоматически открывает транзакцию перед вызовом моего уровня доступа к данным, с Aspect, который указывает на аннотацию «@Transactional» и выполняет запросы внутри транзакции. Простое выполнение любого запроса в методе «@Transactional» также будет работать до вызова уровня доступа к данным Hibernate.

Без аннотации «@Transactional» я не смог бы контролировать управление транзакциями в Hibernate.

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