FindByAllXXX problem

View: New views
13 Messages — Rating Filter:   Alert me  

FindByAllXXX problem

by jdcalus :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I am hoping others have seen something like this before:

when I invoke the following url http://localhost:8080/loohcs/question/listQuestionAnswers?quid=81

def listQuestionAnswers = {
                      
         def list = Answer.findAllByParentQuestion(new Question(id:params.quid))
        
         String res = ""
                if(list!= null){
                
                list?.each{
                   res = res + """<li id="${it.id}">""" + it.value + "</li>"
                    }
                
                }
                else{
                    res = "<li>No Answers Yet</li>"
                }
           
            render(text:res, contentType:"text/hml")
       }


I get the following Exception

[24396] errors.GrailsExceptionResolver org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: Question; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: Question
org.codehaus.groovy.runtime.InvokerInvocationException: org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: Question; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: Question
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:92)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:226)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:899)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:946)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:740)
        at groovy.lang.Closure.call(Closure.java:292)
        at groovy.lang.Closure.call(Closure.java:287)
        at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleAction(SimpleGrailsControllerHelper.java:503)
        at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.executeAction(SimpleGrailsControllerHelper.java:394)
        at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleURI(SimpleGrailsControllerHelper.java:233)
        at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleURI(SimpleGrailsControllerHelper.java:154)
        at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController.handleRequest(SimpleGrailsController.java:88)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
        at org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(GrailsDispatcherServlet.java:251)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:268)
        at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
        at org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingInfo(WebUtils.java:198)
        at org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingInfo(WebUtils.java:185)
        at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterInternal(UrlMappingsFilter.java:117)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
        at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.parsePage(GrailsPageFilter.java:119)
        at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.doFilter(GrailsPageFilter.java:82)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
        at org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter.doFilterInternal(GrailsReloadServletFilter.java:142)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
        at org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:68)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:183)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:138)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
        at org.mortbay.jetty.Server.handle(Server.java:295)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
        at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:827)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379)
        at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:361)
        at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: Question; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: Question
        at QuestionController$_closure11.doCall(QuestionController.groovy:115)
        at QuestionController$_closure11.doCall(QuestionController.groovy)
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: Question
        ... 2 more




Below are my domain class definitions

class Answer {

        static belongsTo = Question
        String value
        boolean correct
        Date submitDate
        Question parentQuestion
       
        public String toString(){
            return value
        }

}

class Question {
        String title
        String description
        Date submitDate
        String hint
        Student author
        String communityid
        static hasMany = [answers: Answer, reflinks: Qref]
        transient def communities = []
        transient def communityName
       
        public String toString(){
            return title
        }
}


I must be missing something simple, but have been spinning around and around for several hours.

Cheers
-Jeff
--------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email

Re: FindByAllXXX problem

by fernando.takai :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Jeff,

why don't you get the question from the database?

like:

def question = Question.get(params.id)
def list = Answer.findAllByParentQuestion(question)

Cheers!

On Fri, Jul 4, 2008 at 3:52 PM, <jdcalus@...> wrote:
I am hoping others have seen something like this before:

when I invoke the following url http://localhost:8080/loohcs/question/listQuestionAnswers?quid=81

def listQuestionAnswers = {
                      
         def list = Answer.findAllByParentQuestion(new Question(id:params.quid))
        
         String res = ""
                if(list!= null){
                
                list?.each{
                   res = res + """<li id="${it.id}">""" + it.value + "</li>"
                    }
                
                }
                else{
                    res = "<li>No Answers Yet</li>"
                }
           
            render(text:res, contentType:"text/hml")
       }


I get the following Exception

[24396] errors.GrailsExceptionResolver org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: Question; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: Question
org.codehaus.groovy.runtime.InvokerInvocationException: org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: Question; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: Question
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:92)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:226)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:899)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:946)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:740)
        at groovy.lang.Closure.call(Closure.java:292)
        at groovy.lang.Closure.call(Closure.java:287)
        at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleAction(SimpleGrailsControllerHelper.java:503)
        at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.executeAction(SimpleGrailsControllerHelper.java:394)
        at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleURI(SimpleGrailsControllerHelper.java:233)
        at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleURI(SimpleGrailsControllerHelper.java:154)
        at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController.handleRequest(SimpleGrailsController.java:88)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
        at org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(GrailsDispatcherServlet.java:251)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:268)
        at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
        at org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingInfo(WebUtils.java:198)
        at org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingInfo(WebUtils.java:185)
        at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterInternal(UrlMappingsFilter.java:117)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
        at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.parsePage(GrailsPageFilter.java:119)
        at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.doFilter(GrailsPageFilter.java:82)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
        at org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter.doFilterInternal(GrailsReloadServletFilter.java:142)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
        at org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:68)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:183)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:138)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
        at org.mortbay.jetty.Server.handle(Server.java:295)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
        at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:827)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379)
        at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:361)
        at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: Question; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: Question
        at QuestionController$_closure11.doCall(QuestionController.groovy:115)
        at QuestionController$_closure11.doCall(QuestionController.groovy)
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: Question
        ... 2 more




Below are my domain class definitions

class Answer {

        static belongsTo = Question
        String value
        boolean correct
        Date submitDate
        Question parentQuestion
       
        public String toString(){
            return value
        }

}

class Question {
        String title
        String description
        Date submitDate
        String hint
        Student author
        String communityid
        static hasMany = [answers: Answer, reflinks: Qref]
        transient def communities = []
        transient def communityName
       
        public String toString(){
            return title
        }
}


I must be missing something simple, but have been spinning around and around for several hours.

Cheers
-Jeff
--------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email



--
Fernando "Takai"
http://flickr.com/photos/supeertakai
http://fernandotakai.tumblr.com/
http://twitter.com/fernando_takai

Re: FindByAllXXX problem

by burtbeckwith :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Or to avoid 2 queries:

   def answers = Answer.findAll("from Answer a where a.parentQuestion.id=:id",
[id: params.id])

Also note that Hibernate never returns a null list, only an empty one if no
results are found, so you can remove the 2 null checks.

Burt

On Friday 04 July 2008 2:55:07 pm Fernando Takai wrote:

> Jeff,
>
> why don't you get the question from the database?
>
> like:
>
> def question = Question.get(params.id)
> def list = Answer.findAllByParentQuestion(question)
>
> Cheers!
>
> On Fri, Jul 4, 2008 at 3:52 PM, <jdcalus@...> wrote:
> > I am hoping others have seen something like this before:
> >
> > when I invoke the following url
> > http://localhost:8080/loohcs/question/listQuestionAnswers?quid=81
> >
> > def listQuestionAnswers = {
> >
> >          def list = Answer.findAllByParentQuestion(new
> > Question(id:params.quid))
> >
> >          String res = ""
> >                 if(list!= null){
> >
> >                 list?.each{
> >                    res = res + """<li id="${it.id}">""" + it.value +
> > "</li>"
> >                     }
> >
> >                 }
> >                 else{
> >                     res = "<li>No Answers Yet</li>"
> >                 }
> >
> >             render(text:res, contentType:"text/hml")
> >        }
> >
> >
> > I get the following Exception
> >
> > [24396] errors.GrailsExceptionResolver
> > org.springframework.dao.InvalidDataAccessApiUsageException: object
> > references an unsaved transient instance - save the transient instance
> > before flushing: Question; nested exception is
> > org.hibernate.TransientObjectException: object references an unsaved
> > transient instance - save the transient instance before flushing:
> > Question org.codehaus.groovy.runtime.InvokerInvocationException:
> > org.springframework.dao.InvalidDataAccessApiUsageException: object
> > references an unsaved transient instance - save the transient instance
> > before flushing: Question; nested exception is
> > org.hibernate.TransientObjectException: object references an unsaved
> > transient instance - save the transient instance before flushing:
> > Question at
> > org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:92)
> >         at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:226)
> >         at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:899)
> >         at
> > groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:946)
> >         at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:740)
> >         at groovy.lang.Closure.call(Closure.java:292)
> >         at groovy.lang.Closure.call(Closure.java:287)
> >         at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.h
> >andleAction(SimpleGrailsControllerHelper.java:503) at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.e
> >xecuteAction(SimpleGrailsControllerHelper.java:394) at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.h
> >andleURI(SimpleGrailsControllerHelper.java:233) at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.h
> >andleURI(SimpleGrailsControllerHelper.java:154) at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController.handleR
> >equest(SimpleGrailsController.java:88) at
> > org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle
> >(SimpleControllerHandlerAdapter.java:48) at
> > org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch
> >(GrailsDispatcherServlet.java:251) at
> > org.springframework.web.servlet.DispatcherServlet.doService(DispatcherSer
> >vlet.java:809) at
> > org.springframework.web.servlet.FrameworkServlet.processRequest(Framework
> >Servlet.java:476) at
> > org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.j
> >ava:431) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at
> > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
> >         at
> > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
> >         at
> > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:21
> >6) at
> > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> >         at
> > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> >         at
> > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
> >         at
> > org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:268)
> >         at
> > org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
> >         at
> > org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingI
> >nfo(WebUtils.java:198) at
> > org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingI
> >nfo(WebUtils.java:185) at
> > org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterI
> >nternal(UrlMappingsFilter.java:117) at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque
> >stFilter.java:75) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.parsePage(Grails
> >PageFilter.java:119) at
> > org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.doFilter(GrailsP
> >ageFilter.java:82) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter.d
> >oFilterInternal(GrailsReloadServletFilter.java:142) at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque
> >stFilter.java:75) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilte
> >rInternal(GrailsWebRequestFilter.java:68) at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque
> >stFilter.java:75) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(C
> >haracterEncodingFilter.java:96) at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque
> >stFilter.java:75) at
> > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(Deleg
> >atingFilterProxy.java:183) at
> > org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingF
> >ilterProxy.java:138) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
> >         at
> > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:21
> >6) at
> > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> >         at
> > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> >         at
> > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
> >         at
> > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> >         at org.mortbay.jetty.Server.handle(Server.java:295)
> >         at
> > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
> >         at
> > org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnec
> >tion.java:827) at
> > org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511) at
> > org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210) at
> > org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379) at
> > org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:3
> >61) at
> > org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.jav
> >a:442) Caused by:
> > org.springframework.dao.InvalidDataAccessApiUsageException: object
> > references an unsaved transient instance - save the transient instance
> > before flushing: Question; nested exception is
> > org.hibernate.TransientObjectException: object references an unsaved
> > transient instance - save the transient instance before flushing:
> > Question at
> > QuestionController$_closure11.doCall(QuestionController.groovy:115)
> >         at
> > QuestionController$_closure11.doCall(QuestionController.groovy) Caused
> > by: org.hibernate.TransientObjectException: object references an unsaved
> > transient instance - save the transient instance before flushing:
> > Question
> >         ... 2 more
> >
> >
> >
> >
> > Below are my domain class definitions
> >
> > class Answer {
> >
> >         static belongsTo = Question
> >         String value
> >         boolean correct
> >         Date submitDate
> >         Question parentQuestion
> >
> >         public String toString(){
> >             return value
> >         }
> >
> > }
> >
> > class Question {
> >         String title
> >         String description
> >         Date submitDate
> >         String hint
> >         Student author
> >         String communityid
> >         static hasMany = [answers: Answer, reflinks: Qref]
> >         transient def communities = []
> >         transient def communityName
> >
> >         public String toString(){
> >             return title
> >         }
> > }
> >
> >
> > I must be missing something simple, but have been spinning around and
> > around for several hours.
> >
> > Cheers
> > -Jeff
> > --------------------------------------------------------------------- To
> > unsubscribe from this list, please visit:
> > http://xircles.codehaus.org/manage_email



---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email



Re: FindByAllXXX problem

by jdcalus :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Burt & Fernando,

Thanks for the help. Works perfect, just needed to wrap the [id: params.id] to be a long like [id: new Long(params.id)] since  Hibernate makes the id's longs in the DB.

BTW, I changed the first null check to be a size() check. Thanks for the pointer there.


Cheers
-Jeff


From: Burt Beckwith <burt@...>
To: user@...
Date: 07/04/2008 02:28 PM
Subject: Re: [grails-user] FindByAllXXX problem





Or to avoid 2 queries:

  def answers = Answer.findAll("from Answer a where a.parentQuestion.id=:id",
[id: params.id])

Also note that Hibernate never returns a null list, only an empty one if no
results are found, so you can remove the 2 null checks.

Burt

On Friday 04 July 2008 2:55:07 pm Fernando Takai wrote:
> Jeff,
>
> why don't you get the question from the database?
>
> like:
>
> def question = Question.get(params.id)
> def list = Answer.findAllByParentQuestion(question)
>
> Cheers!
>
> On Fri, Jul 4, 2008 at 3:52 PM, <jdcalus@...> wrote:
> > I am hoping others have seen something like this before:
> >
> > when I invoke the following url
> >
http://localhost:8080/loohcs/question/listQuestionAnswers?quid=81
> >
> > def listQuestionAnswers = {
> >
> >          def list = Answer.findAllByParentQuestion(new
> > Question(id:params.quid))
> >
> >          String res = ""
> >                 if(list!= null){
> >
> >                 list?.each{
> >                    res = res + """<li id="${it.id}">""" + it.value +
> > "</li>"
> >                     }
> >
> >                 }
> >                 else{
> >                     res = "<li>No Answers Yet</li>"
> >                 }
> >
> >             render(text:res, contentType:"text/hml")
> >        }
> >
> >
> > I get the following Exception
> >
> > [24396] errors.GrailsExceptionResolver
> > org.springframework.dao.InvalidDataAccessApiUsageException: object
> > references an unsaved transient instance - save the transient instance
> > before flushing: Question; nested exception is
> > org.hibernate.TransientObjectException: object references an unsaved
> > transient instance - save the transient instance before flushing:
> > Question org.codehaus.groovy.runtime.InvokerInvocationException:
> > org.springframework.dao.InvalidDataAccessApiUsageException: object
> > references an unsaved transient instance - save the transient instance
> > before flushing: Question; nested exception is
> > org.hibernate.TransientObjectException: object references an unsaved
> > transient instance - save the transient instance before flushing:
> > Question at
> > org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:92)
> >         at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:226)
> >         at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:899)
> >         at
> > groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:946)
> >         at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:740)
> >         at groovy.lang.Closure.call(Closure.java:292)
> >         at groovy.lang.Closure.call(Closure.java:287)
> >         at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.h
> >andleAction(SimpleGrailsControllerHelper.java:503) at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.e
> >xecuteAction(SimpleGrailsControllerHelper.java:394) at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.h
> >andleURI(SimpleGrailsControllerHelper.java:233) at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.h
> >andleURI(SimpleGrailsControllerHelper.java:154) at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController.handleR
> >equest(SimpleGrailsController.java:88) at
> > org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle
> >(SimpleControllerHandlerAdapter.java:48) at
> > org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch
> >(GrailsDispatcherServlet.java:251) at
> > org.springframework.web.servlet.DispatcherServlet.doService(DispatcherSer
> >vlet.java:809) at
> > org.springframework.web.servlet.FrameworkServlet.processRequest(Framework
> >Servlet.java:476) at
> > org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.j
> >ava:431) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at
> > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
> >         at
> > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
> >         at
> > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:21
> >6) at
> > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> >         at
> > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> >         at
> > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
> >         at
> > org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:268)
> >         at
> > org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
> >         at
> > org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingI
> >nfo(WebUtils.java:198) at
> > org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingI
> >nfo(WebUtils.java:185) at
> > org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterI
> >nternal(UrlMappingsFilter.java:117) at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque
> >stFilter.java:75) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.parsePage(Grails
> >PageFilter.java:119) at
> > org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.doFilter(GrailsP
> >ageFilter.java:82) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter.d
> >oFilterInternal(GrailsReloadServletFilter.java:142) at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque
> >stFilter.java:75) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilte
> >rInternal(GrailsWebRequestFilter.java:68) at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque
> >stFilter.java:75) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(C
> >haracterEncodingFilter.java:96) at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque
> >stFilter.java:75) at
> > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(Deleg
> >atingFilterProxy.java:183) at
> > org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingF
> >ilterProxy.java:138) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
> >         at
> > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:21
> >6) at
> > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> >         at
> > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> >         at
> > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
> >         at
> > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> >         at org.mortbay.jetty.Server.handle(Server.java:295)
> >         at
> > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
> >         at
> > org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnec
> >tion.java:827) at
> > org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511) at
> > org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210) at
> > org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379) at
> > org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:3
> >61) at
> > org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.jav
> >a:442) Caused by:
> > org.springframework.dao.InvalidDataAccessApiUsageException: object
> > references an unsaved transient instance - save the transient instance
> > before flushing: Question; nested exception is
> > org.hibernate.TransientObjectException: object references an unsaved
> > transient instance - save the transient instance before flushing:
> > Question at
> > QuestionController$_closure11.doCall(QuestionController.groovy:115)
> >         at
> > QuestionController$_closure11.doCall(QuestionController.groovy) Caused
> > by: org.hibernate.TransientObjectException: object references an unsaved
> > transient instance - save the transient instance before flushing:
> > Question
> >         ... 2 more
> >
> >
> >
> >
> > Below are my domain class definitions
> >
> > class Answer {
> >
> >         static belongsTo = Question
> >         String value
> >         boolean correct
> >         Date submitDate
> >         Question parentQuestion
> >
> >         public String toString(){
> >             return value
> >         }
> >
> > }
> >
> > class Question {
> >         String title
> >         String description
> >         Date submitDate
> >         String hint
> >         Student author
> >         String communityid
> >         static hasMany = [answers: Answer, reflinks: Qref]
> >         transient def communities = []
> >         transient def communityName
> >
> >         public String toString(){
> >             return title
> >         }
> > }
> >
> >
> > I must be missing something simple, but have been spinning around and
> > around for several hours.
> >
> > Cheers
> > -Jeff
> > --------------------------------------------------------------------- To
> > unsubscribe from this list, please visit:
> >
http://xircles.codehaus.org/manage_email



---------------------------------------------------------------------
To unsubscribe from this list, please visit:

   
http://xircles.codehaus.org/manage_email





Re: FindByAllXXX problem

by fernando.takai :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Jeff,

Just another thing -- you don't need to wrap it in a long, groovy/grails does it for you =D

Cheers!

On Sat, Jul 5, 2008 at 1:47 AM, <jdcalus@...> wrote:

Burt & Fernando,

Thanks for the help. Works perfect, just needed to wrap the [id: params.id] to be a long like [id: new Long(params.id)] since  Hibernate makes the id's longs in the DB.

BTW, I changed the first null check to be a size() check. Thanks for the pointer there.


Cheers
-Jeff


From: Burt Beckwith <burt@...>
To: user@...
Date: 07/04/2008 02:28 PM
Subject: Re: [grails-user] FindByAllXXX problem





Or to avoid 2 queries:

  def answers = Answer.findAll("from Answer a where a.parentQuestion.id=:id",
[id: params.id])

Also note that Hibernate never returns a null list, only an empty one if no
results are found, so you can remove the 2 null checks.

Burt

On Friday 04 July 2008 2:55:07 pm Fernando Takai wrote:
> Jeff,
>
> why don't you get the question from the database?
>
> like:
>
> def question = Question.get(params.id)
> def list = Answer.findAllByParentQuestion(question)
>
> Cheers!
>
> On Fri, Jul 4, 2008 at 3:52 PM, <jdcalus@...> wrote:
> > I am hoping others have seen something like this before:
> >
> > when I invoke the following url
> >
http://localhost:8080/loohcs/question/listQuestionAnswers?quid=81
> >
> > def listQuestionAnswers = {
> >
> >          def list = Answer.findAllByParentQuestion(new
> > Question(id:params.quid))
> >
> >          String res = ""
> >                 if(list!= null){
> >
> >                 list?.each{
> >                    res = res + """<li id="${it.id}">""" + it.value +
> > "</li>"
> >                     }
> >
> >                 }
> >                 else{
> >                     res = "<li>No Answers Yet</li>"
> >                 }
> >
> >             render(text:res, contentType:"text/hml")
> >        }
> >
> >
> > I get the following Exception
> >
> > [24396] errors.GrailsExceptionResolver
> > org.springframework.dao.InvalidDataAccessApiUsageException: object
> > references an unsaved transient instance - save the transient instance
> > before flushing: Question; nested exception is
> > org.hibernate.TransientObjectException: object references an unsaved
> > transient instance - save the transient instance before flushing:
> > Question org.codehaus.groovy.runtime.InvokerInvocationException:
> > org.springframework.dao.InvalidDataAccessApiUsageException: object
> > references an unsaved transient instance - save the transient instance
> > before flushing: Question; nested exception is
> > org.hibernate.TransientObjectException: object references an unsaved
> > transient instance - save the transient instance before flushing:
> > Question at
> > org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:92)
> >         at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:226)
> >         at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:899)
> >         at
> > groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:946)
> >         at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:740)
> >         at groovy.lang.Closure.call(Closure.java:292)
> >         at groovy.lang.Closure.call(Closure.java:287)
> >         at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.h
> >andleAction(SimpleGrailsControllerHelper.java:503) at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.e
> >xecuteAction(SimpleGrailsControllerHelper.java:394) at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.h
> >andleURI(SimpleGrailsControllerHelper.java:233) at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.h
> >andleURI(SimpleGrailsControllerHelper.java:154) at
> > org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController.handleR
> >equest(SimpleGrailsController.java:88) at
> > org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle
> >(SimpleControllerHandlerAdapter.java:48) at
> > org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch
> >(GrailsDispatcherServlet.java:251) at
> > org.springframework.web.servlet.DispatcherServlet.doService(DispatcherSer
> >vlet.java:809) at
> > org.springframework.web.servlet.FrameworkServlet.processRequest(Framework
> >Servlet.java:476) at
> > org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.j
> >ava:431) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at
> > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
> >         at
> > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
> >         at
> > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:21
> >6) at
> > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> >         at
> > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> >         at
> > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
> >         at
> > org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:268)
> >         at
> > org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
> >         at
> > org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingI
> >nfo(WebUtils.java:198) at
> > org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingI
> >nfo(WebUtils.java:185) at
> > org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterI
> >nternal(UrlMappingsFilter.java:117) at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque
> >stFilter.java:75) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.parsePage(Grails
> >PageFilter.java:119) at
> > org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.doFilter(GrailsP
> >ageFilter.java:82) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter.d
> >oFilterInternal(GrailsReloadServletFilter.java:142) at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque
> >stFilter.java:75) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilte
> >rInternal(GrailsWebRequestFilter.java:68) at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque
> >stFilter.java:75) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(C
> >haracterEncodingFilter.java:96) at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque
> >stFilter.java:75) at
> > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(Deleg
> >atingFilterProxy.java:183) at
> > org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingF
> >ilterProxy.java:138) at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHand
> >ler.java:1089) at
> > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
> >         at
> > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:21
> >6) at
> > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> >         at
> > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> >         at
> > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
> >         at
> > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> >         at org.mortbay.jetty.Server.handle(Server.java:295)
> >         at
> > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
> >         at
> > org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnec
> >tion.java:827) at
> > org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511) at
> > org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210) at
> > org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379) at
> > org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:3
> >61) at
> > org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.jav
> >a:442) Caused by:
> > org.springframework.dao.InvalidDataAccessApiUsageException: object
> > references an unsaved transient instance - save the transient instance
> > before flushing: Question; nested exception is
> > org.hibernate.TransientObjectException: object references an unsaved
> > transient instance - save the transient instance before flushing:
> > Question at
> > QuestionController$_closure11.doCall(QuestionController.groovy:115)
> >         at
> > QuestionController$_closure11.doCall(QuestionController.groovy) Caused
> > by: org.hibernate.TransientObjectException: object references an unsaved
> > transient instance - save the transient instance before flushing:
> > Question
> >         ... 2 more
> >
> >
> >
> >
> > Below are my domain class definitions
> >
> > class Answer {
> >
> >         static belongsTo = Question
> >         String value
> >         boolean correct
> >         Date submitDate
> >         Question parentQuestion
> >
> >         public String toString(){
> >             return value
> >         }
> >
> > }
> >
> > class Question {
> >         String title
> >         String description
> >         Date submitDate
> >         String hint
> >         Student author
> >         String communityid
> >         static hasMany = [answers: Answer, reflinks: Qref]
> >         transient def communities = []
> >         transient def communityName
> >
> >         public String toString(){
> >             return title
> >         }
> > }
> >
> >
> > I must be missing something simple, but have been spinning around and
> > around for several hours.
> >
> > Cheers
> > -Jeff
> > --------------------------------------------------------------------- To
> > unsubscribe from this list, please visit:
> >
http://xircles.codehaus.org/manage_email



---------------------------------------------------------------------
To unsubscribe from this list, please visit:

   
http://xircles.codehaus.org/manage_email







--
Fernando "Takai"
http://flickr.com/photos/supeertakai
http://fernandotakai.tumblr.com/
http://twitter.com/fernando_takai

How to add Domain Class properties at runtime

by andreas.lohmann :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,
 
I want a User to be able to add properties to an existing Domain Class or even to create a new Domain Class from a given template.
So e.g. the user creates a new persistent object using a web form and should be able to add additional properties. The new property
should be added to the domain class and the respective table in the DB.
 
Is their a way to achieve this? Similar topics in the List seemed having ended without a solution.
 
 
Thx in adv.
Andreas

Parent Message unknown How to add Domain Class properties at runtime

by andreas.lohmann :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

How to add Domain Class properties at runtime

Hi,
 
I want a User to be able to add properties to an existing Domain Class or even to create a new Domain Class from a given template.

So e.g. the user creates a new persistent object using a web form and should be able to add additional properties. The new property

should be added to the domain class and the respective table in the DB.
 
Is their a way to achieve this? Similar topics in the list seemed having ended without a solution.
 
 
Thx in adv.
Andreas

(sorry for posting twice but for whatever a reason the the first one appeared as reply to a completely different topic )


Re: How to add Domain Class properties at runtime

by Jan Ehrhardt :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

You can create a Plugin and use the methods in the GrailsPlugin class to hook some properties into domain classes, the problem is, that this methods are used on startup, thus it doesn't work during runtime.
On the other hand, all the generation stuff - if you find a good way to do - will slow down your application.
A better way in - my eyes - would be to simulate the behaviour. Maybe, you can store 'additional properties' in a Map.

I don't know, why it should be imortant, that the database strukture should change during runtime in your application.

Cheers
Jan

On Wed, Jul 9, 2008 at 9:53 AM, <andreas.lohmann@...> wrote:

Hi,
 
I want a User to be able to add properties to an existing Domain Class or even to create a new Domain Class from a given template.

So e.g. the user creates a new persistent object using a web form and should be able to add additional properties. The new property

should be added to the domain class and the respective table in the DB.
 
Is their a way to achieve this? Similar topics in the list seemed having ended without a solution.
 
 
Thx in adv.
Andreas

(sorry for posting twice but for whatever a reason the the first one appeared as reply to a completely different topic )



Re: How to add Domain Class properties at runtime

by Maher Gamal :: Rate this Message: