Имеет ли смысл TransactionAttributeType.NOT_SUPPORTED для получения сущностей?
Имеет ли TransactionAttributeType.NOT_SUPPORTED
на каждом методе поиска БД имеет смысл? Я не вижу смысла в присоединении сущности, если она не будет выполнять обновление.
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
pubic List<AnEntity> getListEntities(){
TypedQuery<AnEntity> query = em.createNamedQuery("AnEntity.myQuery",AnEntity.class);
return query.getResultList();
}
Это все еще заканчивается в кеше?
Единственный раз, когда кажется полезным использовать REQUIRED
распространение транскрипции - это когда требуется обновление:
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void editPersonName(Integer id, String newName){
AnEntity anEntity= em.find(AnEntity.class, id);
anEntity.setName(newName);
}
Кроме этого я не вижу смысла.
1 ответ
Нет, не имеет смысла использовать NOT_SUPPORTED
распространение транзакций для запросов только для чтения, но имеет смысл использовать значение по умолчанию REQUIRED
распространение транзакции. Вам нужна транзакция для чтения данных тоже. База данных всегда использует транзакцию, независимо от того, указали вы ее или нет.
Использование явной транзакции позволяет сгруппировать несколько операторов в одну транзакцию, и, если вы используете Hibernate, вы можете избежать агрессивных накладных расходов на освобождение соединения.
То, что JPA позволяет вам выполнять запросы чтения без транзакции, не означает, что вы должны делать это таким образом.
NOT_SUPPORTED
Режим полезен, когда вы хотите выполнить метод службы за пределами текущей области транзакции, и это полезно для методов, которые вообще не нуждаются в транзакции (например, отправка электронного письма), чтобы избежать накладных расходов на запуск / завершение контекста транзакции.,