Domanda

Nel Graal 1.2.5 progetto che sto cercando di risolvere, usiamo i Grails Plugin ricercabile .5.5.1.

Il problema è che ogni volta che tentiamo di indicizzare grandi classi di dominio, Grails continua a lanciare:

ERRORE ibernazione.AssertionFailure-an si è verificato un errore di asserzione (questo può indica un bug in Ibernazione, ma è più probabilmente a causa dell'uso non sicuro del sessione) org.ibernazione.AssertionFailure:collection [domain-class] non era elaborato da flush()

Ma le classi di dominio coinvolte sono state mappate e utilizzate da ibernazione senza problemi al di fuori delle chiamate al plugin ricercabile.

L'uso del plugin ricercabile va come segue:

  1. Creare una sessione compass con compass.openSession()
  2. Inizia la transazione compass: compassSession.beginTransaction()
  3. Poi compassSession.create(result.get(0)) viene chiamato su un'importante classe di dominio non indicizzata
  4. Infine compassTransaction.commit() è chiamato a commettere la transazione.
  5. Goto 2 e process next domain class

Tra la 3 e la 4a classe di dominio, viene attivato un autoflush che genera l'errore.

Qualcuno può darmi qualche suggerimento su come risolvere questo problema?

Qualcuno ha riscontrato questo problema prima?

So che avevano un problema sistemico con questo di nuovo in pre .5 versioni del ricercabile-plugin. È possibile che questi problemi non siano stati completamente risolti?

È stato utile?

Soluzione

Questo articolo mi ha aiutato a capirlo.Devi fare alcune query di ibernazione in una sessione che ha oggetti sporchi e ottengono flush()- ed nel bel mezzo della modifica.

A volte è possibile spostare tutte le query di sola lettura al di fuori della transazione, prima che si verifichi qualsiasi modifica e apportare modifiche in withTransaction{}.

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