2010-12-06 69 views
2

我收到一个如下所示的错误。这与我的瀑布建立方式有关吗?哪里是适合开始调查的地方?现在我有一个角色有许多角色职责。角色责任属于角色。 RoleDuty只有一个字段,值班,这是一个空字符串。角色具有RoleDuties列表的all-delete-orphan映射。hibernate声明从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) 

类定义:

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

请出示你的角色和RoleDuty类定义 – 2010-12-06 15:16:57

回答

5

Hibernate的错误消息“不发生后异常刷新会议”表明,发生在这个会话一个Hibernate相关的异常,但你的代码捕捉到的异常和继续使用会议。 Hibernate的API指出,如果Hibernate抛出异常,则必须回滚事务/关闭会话并在新会话中执行任何您想要的操作。

很难从这个堆栈跟踪和调试确切地说明问题是什么,Hibernate错误涉及试验和错误。我建议你在查找一个异常之前调试你的代码,并找出如何避免它。