每个数据库查找方法上都有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 toodatabase always uses a transaction,无论是否指定。

使用显式事务允许您在一个事务中将多个语句分组,并且,如果您使用的是Hibernate,则可以避免aggressive connection release开销。

仅仅因为JPA允许您无需事务就可以执行读取查询,但这并不意味着您必须这样做。

当您想在当前事务范围之外执行服务方法时,NOT_SUPPORTED模式非常有用,它对于根本不需要事务的方法(例如,发送电子邮件)很有用,从而避免了开始/结束交易的开销。交易环境。

08-16 18:28