例如下面的服务类'方法:
@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?
答案 0 :(得分:2)
是的,当您对数据库执行多个读取操作并且您关心一致性时。您可以应用更严格的事务隔离级别来获取读锁定,并避免出现幻像读取等问题。
如果您只运行一个查询,请将交易标记为readOnly
,或者甚至完全跳过@Transactional
。
答案 1 :(得分:0)
是的,但在这种情况下@Transactional(readOnly=true)
就足够了,这可以帮助DataStore完成一系列有效的工作。
在这种情况下,'Isolation'可能是使用交易的最重要原因。