Имеет ли смысл 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 Режим полезен, когда вы хотите выполнить метод службы за пределами текущей области транзакции, и это полезно для методов, которые вообще не нуждаются в транзакции (например, отправка электронного письма), чтобы избежать накладных расходов на запуск / завершение контекста транзакции.,

Другие вопросы по тегам