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