TransactionAttributeType.NOT_SUPPORTED 对检索实体有意义吗?
Does TransactionAttributeType.NOT_SUPPORTED make sense for retrieving entities?
在每个数据库查找方法上使用 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);
}
除此之外,我真的不明白这一点。
不,对只读查询使用 NOT_SUPPORTED
事务传播没有意义,但使用默认的 REQUIRED
事务传播很有意义。您还需要一个事务来读取数据。数据库总是使用事务,不管你指定与否。
使用显式事务允许您将多个语句分组到一个事务中,并且,如果您使用的是 Hibernate,则可以避免主动释放连接开销。
仅仅因为 JPA 允许您在没有事务的情况下执行读取查询,并不意味着您必须这样做。
当您想在当前事务范围之外执行服务方法时,NOT_SUPPORTED
模式很有用。例如,当您有根本不需要事务的方法(例如发送电子邮件)时,可以避免 starting/ending 事务上下文的开销。
在每个数据库查找方法上使用 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);
}
除此之外,我真的不明白这一点。
不,对只读查询使用 NOT_SUPPORTED
事务传播没有意义,但使用默认的 REQUIRED
事务传播很有意义。您还需要一个事务来读取数据。数据库总是使用事务,不管你指定与否。
使用显式事务允许您将多个语句分组到一个事务中,并且,如果您使用的是 Hibernate,则可以避免主动释放连接开销。
仅仅因为 JPA 允许您在没有事务的情况下执行读取查询,并不意味着您必须这样做。
当您想在当前事务范围之外执行服务方法时,NOT_SUPPORTED
模式很有用。例如,当您有根本不需要事务的方法(例如发送电子邮件)时,可以避免 starting/ending 事务上下文的开销。