Когда мне нужно явно обращаться к методам EntityManager (меня особенно интересуют функции clear(), close(), flush(), detach()) в моих методах обслуживания, которые дополнительно работать с репозиториями Spring Data?Явное использование EntityManager с репозиториями Spring Data
Меня больше всего интересует общее понимание предмета. Скажем, в одном приложении я нашел это:
for (MyEntity myEntity: entities) {
...some logic here
mySpringDataRepo.save (myEntity);
}
entityManager.flush();
entityManager.clear();
Я нашел такое использование EntityManager оправданной, так как память может быть перегружен субъектами. Однако в другом фрагменте кода:
mySpringDataRepository.save(entity);
entityManager.detach(entity);
Нужно явно отделить сущность? Не использует ли Spring данные самостоятельно?
Я также нашел этот пост: http://newscentral.exsees.com/item/de38b01b7a9f794a124e2c72b97d1103-c5533957a4140e3c51e7d295ec840d08
, которые путают меня еще больше.
Что касается метода close(), я считаю, что нет необходимости называть его в среде EE. Я прав?
PS: мои конфигурации очень мейнстрим: JpaTransactionManager/LocalContainerEntityManagerFactoryBean
Просто небольшая поправка: Хранилища должны расширить JpaRepository для доступа к методам flush и saveAndFlush. CrudRepository не содержит этих методов. – dunni
@Paul, я знаю о возможности сохранить всю коллекцию сразу, но в этом конкретном случае это было сделано по какой-то причине. Смотрите, где я поставил «... какая-то логика здесь», на самом деле довольно несколько строк кода, которые должны обрабатываться в обход. – yuranos87
@PaulNUK: Что делать, если мы используем несколько разных репозиториев в рамках одной транзакции/одного пользовательского запроса/одного транзакционного метода? Будут ли все они использовать один экземпляр EntityManager или новый для каждого репо? – yuranos87