是否存在将@Transactional放入仅检索数据的方法的情况?

时间:2011-08-17 06:56:28

标签: java jpa

例如下面的服务类'方法:

@Transactional
public void findDiscountedItems() {
   List<Item> items = itemDao.findItems();
   List<Item> discountedItems = new ArrayList<Item>();
   for (Item i: items) {
      if (isDiscounted(i))
         discountedItems.add(i);
   }
   return discountedItems;
}

是否有任何情况需要此方法为@Transactional?

2 个答案:

答案 0 :(得分:2)

是的,当您对数据库执行多个读取操作并且您关心一致性时。您可以应用更严格的事务隔离级别来获取读锁定,并避免出现幻像读取等问题。

如果您只运行一个查询,请将交易标记为readOnly,或者甚至完全跳过@Transactional

答案 1 :(得分:0)

是的,但在这种情况下@Transactional(readOnly=true)就足够了,这可以帮助DataStore完成一系列有效的工作。 在这种情况下,'Isolation'可能是使用交易的最重要原因。