2016-02-08 2 views
1

Имеет ли смысл 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); 
} 

Кроме того, я не вижу смысла.

ответ

4

Нет, не имеет смысла использовать распространение транзакций NOT_SUPPORTED для запросов только для чтения, но имеет смысл использовать по умолчанию транзакцию транзакций по умолчанию REQUIRED. Вам нужен transaction for reading data too. database always uses a transaction, независимо от того, указали вы это или нет.

Использование явной транзакции позволяет группировать несколько операторов в одной транзакции и, если вы используете Hibernate, вы можете избежать накладных расходов aggressive connection release.

Просто потому, что JPA позволяет выполнять запросы чтения без транзакции, это не значит, что вам нужно это делать.

Режим NOT_SUPPORTED полезен, если вы хотите выполнить метод службы за пределами текущей области транзакции, и это полезно для методов, которым вообще не нужна транзакция (например, отправка электронной почты), чтобы вы избежали накладных расходов начало/конец контекста транзакции.

Смежные вопросы