2010-12-06 10 views
2

以下のようなエラーが表示されます。これは私のカスケードが設定されている方法と関係がありますか?調査を開始する適切な場所はどこですか?今、私は多くの役割を担っている役割を持っています。 RoleDuty belongsToロール。 RoleDutyには1つのフィールド、dutyがあります。これはnull可能なStringです。ロールには、RoleDutiesリストのすべてのdelete-orphanのマッピングがあります。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クラス定義を表示してください –

+0

は、私はいくつかの同様の問題を抱えていた、私はこのリンクは本当に重宝 – Derek

+0

クラス定義を追加しました http://jira.grails.org/browse/GRAILS-5865 – Gil

答えて

5

HibernateのエラーメッセージにHibernate関連の例外は、このセッションで発生したが、あなたのコードが例外をキャッチしていることを示唆して「例外が発生した後にセッションをフラッシュしていない」をセッションを引き続き使用しました。 HibernateのAPIによると、Hibernateが例外をスローすると、トランザクションをロールバックしたり、セッションを閉じたり、新しいSessionで必要な処理をしたりする必要があります。

このスタックトレースだけで問題が何であるのかを正確に伝えるのは難しく、Hibernateエラーのデバッグには試行錯誤が必要です。この前に例外を探して、それを避ける方法を見つけながらコードをデバッグすることをお勧めします。

関連する問題