Come posso ottenere l'equivalente di questo codice:Come abilitare LockModeType.PESSIMISTIC_WRITE quando si cercano entità con Spring Data JPA?
tx.begin();
Widget w = em.find(Widget.class, 1L, LockModeType.PESSIMISTIC_WRITE);
w.decrementBy(4);
em.flush();
tx.commit();
... ma utilizzando primavera e la primavera-Data-JPA annotazioni?
La base del mio codice esistente è:
@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);
}
}
Ma non so come specificare che tutto nel metodo updateWidgetStock
dovrebbe essere fatto con un set di blocco pessimistico.
C'è un'annotazione primavera dati JPA org.springframework.data.jpa.repository.Lock
che consente di impostare una LockModeType
, ma non so se è valida per metterlo sul metodo updateWidgetStock
. Suona più come un'annotazione sul WidgetRepository
, perché il Javadoc dice:
org.springframework.data.jpa.repository
@Target (value = METHOD)
@Retention (value = Runtime)
@Documented
public @interface Lock
Annotazione utilizzata per specificare il LockModeType da utilizzare durante l'esecuzione della query. Verrà valutato quando si utilizza Query su un metodo di query o se si ottiene la query dal nome del metodo.
... in modo che non sembra essere utile.
Come è possibile eseguire il metodo updateWidgetStock()
con LockModeType.PESSIMISTIC_WRITE
impostato?
Entrambe le risposte a questa domanda potrebbe essere utile: http://stackoverflow.com/questions/11880924/how-to-add-custom-method -to-spring-data-jpa –