每个数据库查找方法上都有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);
}
除此之外,我没有真正的意义。
最佳答案
不,对于只读查询使用NOT_SUPPORTED
事务传播没有任何意义,但是使用默认的REQUIRED
事务传播很有意义。您需要一个transaction for reading data too。 database always uses a transaction,无论是否指定。
使用显式事务允许您在一个事务中将多个语句分组,并且,如果您使用的是Hibernate,则可以避免aggressive connection release开销。
仅仅因为JPA允许您无需事务就可以执行读取查询,但这并不意味着您必须这样做。
当您想在当前事务范围之外执行服务方法时,NOT_SUPPORTED
模式非常有用,它对于根本不需要事务的方法(例如,发送电子邮件)很有用,从而避免了开始/结束交易的开销。交易环境。