Есть ли сценарий, когда вы поместите @Transactional в метод, который только извлекает данные? - PullRequest
1 голос
/ 17 августа 2011

Например, метод этого класса обслуживания ниже:

@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 ]

2 голосов
/ 17 августа 2011

Да, когда вы выполняете несколько операций чтения в базе данных и заботитесь о согласованности. Вы можете применить более строгий уровень изоляции транзакций, чтобы получить блокировки чтения и избежать таких проблем, как фантомное чтение .

Если вы выполняете только один запрос, пометьте транзакцию как readOnly или вообще пропустите @Transactional.

0 голосов
/ 17 августа 2011

Хорошо, да, но в этом случае достаточно @Transactional(readOnly=true), что может помочь DataStore выполнить эффективную работу. 'Изоляция' , вероятно, является в этом случае наиболее важной причиной использования транзакций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...