|
View:
New views
13 Messages
—
Rating Filter:
Alert me
|
|
|
FindByAllXXX problemwhen 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 |
||||||||
|
|
Re: FindByAllXXX problemJeff,
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: -- Fernando "Takai" http://flickr.com/photos/supeertakai http://fernandotakai.tumblr.com/ http://twitter.com/fernando_takai |
||||||||
|
|
Re: FindByAllXXX problemOr 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 problemBurt & 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
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 problemJeff,
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:
-- Fernando "Takai" http://flickr.com/photos/supeertakai http://fernandotakai.tumblr.com/ http://twitter.com/fernando_takai |
||||||||
|
|
How to add Domain Class properties at runtimeHi,
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
|
||||||||
|
|
|
||||||||
|
|
Re: How to add Domain Class properties at runtimeYou 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:
|
||||||||
|
|
Re: How to add Domain Class properties at runtime |