小编典典

TransactionAttributeType.NOT_SUPPORTED对于检索实体有意义吗?

hibernate

是否有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);
 }

除此之外,我没有真正的意义。


阅读 583

收藏
2020-06-20

共1个答案

小编典典

不,使用NOT_SUPPORTED事务传播进行只读查询没有任何意义,但是使用默认REQUIRED事务传播非常有意义。您也需要一笔交易来读取数据。该数据库始终使用事务,如果你指定与否,不管。

使用显式事务允许您在一个事务中将多个语句分组,并且,如果使用的是Hibernate,则可以避免大量的连接释放开销。

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

NOT_SUPPORTED当您要在当前事务范围之外执行服务方法时,此模式很有用;对于根本不需要事务的方法(例如,发送电子邮件),该模式很有用,从而避免了开始/结束事务的开销上下文。

2020-06-20