Sto usando Spring with Hibernate. Sono in esecuzione di test JUnit in questo modo:OptimisticLockException in blocco pessimistico
String number = invoiceNumberService.nextInvoiceNumber();
e il metodo invoiceNumberService è:
InvoiceNumber invoiceNumber = invoiceNumberRepository.findOne(1L);
Sta usando metodo semplice repository di dati di primavera, e sta funzionando bene. Ma quando ho sovrascrivere questo metodo per utilizzare il blocco:
@Lock(LockModeType.PESSIMISTIC_READ)
@Override
InvoiceNumber findOne(Long id);
sto ottenendo "javax.persistence.OptimisticLockException: Riga è stata aggiornata o cancellata da un'altra transazione"
non riesco a capire il motivo per cui la sua eccezione di blocco ottimistico , mentre sto usando il blocco pessimistico? E dov'è questa parte quando un'altra transazione sta cambiando questa entità? Ho già analizzato molte domande simili e sono piuttosto disperata per questo. Grazie per qualsiasi aiuto
Soluzione:
Il problema era nella mia funzione init nella classe di test:
@Before
public void init() {
InvoiceNumber invoiceNumber = new InvoiceNumber(1);
em.persist(invoiceNumber);
em.flush();
}
C'era mancanza di
em.flush();
che salva i dati nel database , quindi findOne() può ora recuperarlo
Mi sono imbattuto nello stesso problema e nella stessa soluzione. Sembra un bug per me che Hibernate non si svuota da solo. – gnomie