Как я могу получить эквивалент этого кода:
tx.begin();
Widget w = em.find(Widget.class, 1L, LockModeType.PESSIMISTIC_WRITE);
w.decrementBy(4);
em.flush();
tx.commit();
... но используя аннотации Spring и Spring -Data-JPA?
В основе моего существующего кода:
@Service
@Transactional(readOnly = true)
public class WidgetServiceImpl implements WidgetService
{
/** The spring-data widget repository which extends CrudRepository<Widget, Long>. */
@Autowired
private WidgetRepository repo;
@Transactional(readOnly = false)
public void updateWidgetStock(Long id, int count)
{
Widget w = this.repo.findOne(id);
w.decrementBy(4);
this.repo.save(w);
}
}
Но я не знаю, как указать, что все в методе updateWidgetStock
должно выполняться с помощью пессимистического набора блокировок.
Существует аннотация , которая позволяет вам установить LockModeType
, но я не знаю, действительно ли оно положено в метод updateWidgetStock
. Это больше похоже на аннотацию на WidgetRepository
, потому что Javadoc говорит:
org.springframework.data.jpa.repository
@Target (value = МЕТОД)
@Retention (value = RUNTIME)
@Документированный
public @interface Lock
Аннотации, используемые для указания типа LockModeType для использования при выполнении запроса. Он будет оцениваться при использовании запроса в методе запроса или вывести запрос из имени метода.
... так что это не кажется полезным.
Как я могу выполнить мой метод updateWidgetStock()
с помощью LockModeType.PESSIMISTIC_WRITE
set?