Domanda

Sto usando la primavera per di e ibernazione per l'accesso ai dati su un database MySQL.Ho il codice all'interno di una transazione che inserisce un record in una tabella e quindi esegue una vista che interroga quella tabella ed esegue alcuni calcoli aggregati.Il problema che vedo è che il record che ho appena inserito durante la stessa transazione, non è incluso nei valori calcolati della vista.Eseguo la stessa vista in mysql workbench e il valore inserito è incluso nella vista.Qualcuno sa cosa sta causando questo?

È stato utile?

Soluzione

In definitiva, ho dovuto chiamare EntityManager.Refresh (Entità oggetto) per aggiornare l'entità per il record di visualizzazione che ho voluto aggiornato.Penso che il problema risieda nel fatto che l'ibernazione non può riconoscere che la vista deve essere aggiornata poiché non sa che dipende (a livello di database) sull'entità originale che è stata aggiornata.Presumo che l'ibernazione sta nella cache dei record dalla vista e non sa che hanno bisogno di essere aggiornati, anche dopo un filo ().

Ibernazione vede il tavolo originale e la vista completamente non correlata, quando in realtà la vista è dipendente dalla tabella e deve essere resa "sporca" ogni volta che cambia la tabella.Non so come ottenere ibernazione per riconoscerlo.

Altri suggerimenti

La maggior parte probabilmente non hai ancora fluso le modifiche al database.Ibernazione non sa che ci sia connessione tra la tavola che hai inserito righe e visualizza che stai leggendo in seguito.Flush EntityManager (o sessione o modello) prima della visualizzazione della visualizzazione.

Questo è probabilmente causato dal livello di isolamento predefinito di mysql che è REPEATABLE READ.

Ciò significa che la transazione in mysql workbench non vedrà modifiche fino a END tale transazione.Eseguire un conteggio selezionato come transazione.

Dovresti vedere le modifiche in mysql workbench una volta rilasciato un commit (o un rollback).

Probabilmente si desidera modificare il livello di isolamento predefinito per l'installazione a READ COMMITTED o modificare il livello di isolamento della sessione in MySQL Workbench a READ COMMITTED

Dettagli su come si eseguono che può essere trovato nel manuale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top