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

Ced*_*Ced 2 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();
}
Run Code Online (Sandbox Code Playgroud)

它是否仍然在缓存中?

使用REQUIREDtranscation传播似乎唯一有用的时间是需要更新时:

 @TransactionAttribute(TransactionAttributeType.REQUIRED)
 public void editPersonName(Integer id, String newName){
      AnEntity anEntity= em.find(AnEntity.class, id);
      anEntity.setName(newName);
 }
Run Code Online (Sandbox Code Playgroud)

除此之外,我并没有真正看到这一点.

Vla*_*cea 6

不,将NOT_SUPPORTED事务传播用于只读查询没有意义,但使用默认REQUIRED事务传播很有意义.您还需要一个事务来读取数据.该数据库始终使用事务,如果你指定与否,不管.

使用显式事务允许您在单个事务中对多个语句进行分组,并且,如果您使用的是Hibernate,则可以避免积极的连接释放开销.

仅仅因为JPA允许您在没有事务的情况下执行读取查询,这并不意味着您必须以这种方式执行.

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