2010-12-06 4 views
2

Je reçois une erreur qui commence comme suit. Cela a-t-il quelque chose à voir avec la façon dont mes cascades sont mises en place? Où est l'endroit approprié pour commencer à enquêter? En ce moment j'ai un rôle qui a beaucoup de rôle. RoleDuty appartient à Role. RoleDuty a seulement un champ, devoir, qui est une chaîne nullable. Rôle a un mappage de tout-supprimer-orphelin pour la liste RoleDuties.hibernate AssertionFailure d'un projet de grails

06.12.2010 10:02:17 *ERROR* AssertionFailure: an assertion failure occured (this may indicate a bug in Hibernate, but is 
more likely due to unsafe use of the session) (AssertionFailure.java, line 47) 
org.hibernate.AssertionFailure: null id in RoleDuty entry (don't flush the Session after an exception occurs) 
     at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:78) 
     at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:187) 
     at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:14 
3) 
     at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219) 
     at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListen 
er.java:99) 
     at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49) 
     at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027) 
     at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390) 
     at org.codehaus.groovy.grails.orm.hibernate.support.GrailsOpenSessionInViewInterceptor.flushIfNecessary(GrailsOp 
enSessionInViewInterceptor.java:116) 
     at org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor.postHandle(OpenSessionInViewIntercept 
or.java:181) 
     at org.codehaus.groovy.grails.orm.hibernate.support.GrailsOpenSessionInViewInterceptor.postHandle(GrailsOpenSess 
ionInViewInterceptor.java:66) 
     at org.springframework.web.servlet.handler.WebRequestHandlerInterceptorAdapter.postHandle(WebRequestHandlerInter 
ceptorAdapter.java:61) 
     at org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(GrailsDispatcherServlet.java:303) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 

définitions de classe:

class RoleDuty 
{ 


    static belongsTo = [role:Role] 

    static constraints = { 
     duty(nullable: true) 
    } 
    static mapping = { 
      duty type:"text" 
    } 

    String duty; 
    boolean _deleted 
    static transients = ['_deleted'] 

    @XmlValue 
    public String getDuty(){ 
    return duty; 
    } 


    String toString() 
    { 
     return duty; 
    } 

} 


public class Role implements Comparable 
{ 

    static belongsTo = [project:Project] 
    static hasMany = [ roleDuties:RoleDuty] 

    static mapping = { 
     roleDuties cascade:"all-delete-orphan", lazy:false 
    } 

    List<RoleDuty> roleDuties = new ArrayList<RoleDuty>() 


} 
+0

S'il vous plaît montrer vos définitions de rôle et de rôleDéfense –

+0

a ajouté les définitions de la classe – Derek

+0

J'ai trouvé ce lien très utile, j'avais des problèmes similaires http://jira.grails.org/browse/GRAILS-5865 – Gil

Répondre

5

message d'erreur de mise en veille prolongée "ne vident pas la session après une exception se produit" suggère qu'une exception liée Hibernate a eu lieu sur cette session, mais votre code pris l'exception et continué à utiliser la session. L'API d'Hibernate indique que si Hibernate déclenche une exception, vous devez annuler la transaction/fermer la session et faire ce que vous voulez dans une nouvelle session.

Il est difficile de dire exactement quel est le problème à partir de cette trace de pile et du débogage. Les erreurs Hibernate impliquent des essais et des erreurs. Je vous suggère de déboguer votre code en cherchant une exception avant celle-ci et de trouver comment l'éviter.

Questions connexes