是否有TransactionAttributeType.NOT_SUPPORTED对每一个数据库查找方法是有道理的?如果不执行更新,我看不到附加实体的意义。
TransactionAttributeType.NOT_SUPPORTED
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) pubic List<AnEntity> getListEntities(){ TypedQuery<AnEntity> query = em.createNamedQuery("AnEntity.myQuery",AnEntity.class); return query.getResultList(); }
它仍然会保留在缓存中吗?
使用REQUIRED事务传播似乎唯一有用的时间是在需要更新时:
REQUIRED
@TransactionAttribute(TransactionAttributeType.REQUIRED) public void editPersonName(Integer id, String newName){ AnEntity anEntity= em.find(AnEntity.class, id); anEntity.setName(newName); }
除此之外,我没有真正的意义。
不,使用NOT_SUPPORTED事务传播进行只读查询没有任何意义,但是使用默认REQUIRED事务传播非常有意义。您也需要一笔交易来读取数据。该数据库始终使用事务,如果你指定与否,不管。
NOT_SUPPORTED
使用显式事务允许您在一个事务中将多个语句分组,并且,如果使用的是Hibernate,则可以避免大量的连接释放开销。
仅仅因为JPA允许您无需事务就可以执行读取查询,但这并不意味着您必须这样做。
NOT_SUPPORTED当您要在当前事务范围之外执行服务方法时,此模式很有用;对于根本不需要事务的方法(例如,发送电子邮件),该模式很有用,从而避免了开始/结束事务的开销上下文。