Question

Dans le Grails projet 1.2.5 que je suis en train de dépanner, nous utilisons les Grails interrogeable plug-in .5.5.1.

Le problème est que chaque fois que nous essayons d'indexer les grands ensembles des classes de domaine, Grails continue de lancer:

ERREUR hibernate.AssertionFailure - un échec d'assertion est survenue (cela peut indiquer un bogue dans Hibernate, mais il est plus probablement en raison de l'utilisation non sécuritaire du session) org.hibernate.AssertionFailure: collection [-classe de domaine] n'a pas été traité par chasse d'eau ()

Mais les classes de domaine concernés ont été cartographiés et utilisé par mise en veille prolongée sans problème en dehors des appels à plug-in interrogeable .

L'utilisation du plug-in interrogeable se présente comme suit:

  1. Création d'une session de la boussole avec compass.openSession()
  2. Début de la transaction boussole: compassSession.beginTransaction()
  3. Ensuite compassSession.create(result.get(0)) est appelé une classe importante de domaine non indexée
  4. Enfin compassTransaction.commit() est appelée à valider la transaction.
  5. Aller à 2 et le processus suivant classe de domaine

Entre le 3 et 4 classe de domaine, un autoflush est déclenchée qui jette l'erreur.

Quelqu'un peut-il me donner des conseils sur la façon de résoudre ce problème?

Quelqu'un at-il rencontré ce problème avant?

Je sais qu'ils avaient un problème systémique avec ce retour dans les versions pré .5 du -plugin recherche. est-il possible ces questions ne sont pas totalement fixé?

Était-ce utile?

La solution

Cet article m'a aidé à comprendre. Vous devez faire une mise en veille prolongée dans une interrogation session qui a des objets sales, et ils obtiennent flush()-ed au milieu de la modification.

Parfois, il est possible de déplacer toutes les requêtes en lecture seule en dehors de la transaction, avant toute modification se produit, et faire des modifications dans withTransaction{}.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top