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

时间:2016-02-08 05:47:29

标签: java hibernate jpa transactions jpql

每个数据库查找方法都有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 个答案:

答案 0 :(得分:6)

不,将NOT_SUPPORTED事务传播用于只读查询没有意义,但使用默认的REQUIRED事务传播很有意义。你需要一个transaction for reading data toodatabase always uses a transaction,无论您是否指定它。

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

仅仅因为JPA允许您在没有交易的情况下执行读取查询,这并不意味着您必须这样做。

当您想要在当前交易范围之外执行服务方法时,NOT_SUPPORTED模式非常有用,并且对于根本不需要交易的方法非常有用(例如,发送电子邮件)这样可以避免开始/结束事务上下文的开销。