2016-02-23 1 views
0

Я использую Grails 2.3.7. Моего класса домена продукт:Ошибка ошибки валидатора Grails

class Product { 
    static belongsTo = [firmData: Firm_data] 

    String name 
    SectorType sectorType 
    Measure measure 
    Float soldProducts 
    Float percentOfIncome 
    Float percentOfExpense 

    static constraints = { 
     name blank:false, unique: 'firmData' 
     percentOfIncome (range: 0..100, validator: {value, object -> 
      def products = Product.findAllByFirmData(object.firmData) 
      def sumOfIncome = (products?.percentOfIncome?.sum() ?: 0) + object.percentOfIncome 
      print sumOfIncome 
      return (sumOfIncome <= 100) 
     }) 
     percentOfExpense (range: 0..100, validator: {value, object -> 
      def products = Product.findAllByFirmData(object.firmData) 
      def sumOfExpense = (products?.percentOfExpense?.sum() ?: 0) + object.percentOfExpense 
      print sumOfExpense 
      return (sumOfExpense <= 100) 
     }) 
    } 
} 

Я хочу, чтобы убедиться, что в следующем добавлен Product, который также принадлежит указанному Firm_data firmData не будет превышать значение 100 (если суммировать все экземпляры продукта для выбранного Firm_data) на значении: percentOfIncome или percentOfExpense.

Я получил сообщение об ошибке при попытке добавить исходные данные при выполнении Bootstrap:

14:14:21,127 ERROR AssertionFailure: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session) 
org.hibernate.AssertionFailure: null id in com.example.Product entry (don't flush the Session after an exception occurs) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:82) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:190) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:147) 
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219) 
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99) 
at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58) 
at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1185) 
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1709) 
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.FindAllByPersistentMethod$1.doInHibernate(FindAllByPersistentMethod.java:113) 
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) 
at org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:343) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.FindAllByPersistentMethod.doInvokeInternalWithExpressions(FindAllByPersistentMethod.java:73) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractClausedStaticPersistentMethod.doInvokeInternal(AbstractClausedStaticPersistentMethod.java:527) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractClausedStaticPersistentMethod.doInvokeInternal(AbstractClausedStaticPersistentMethod.java:401) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractStaticPersistentMethod.invoke(AbstractStaticPersistentMethod.java:79) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractStaticPersistentMethod.invoke(AbstractStaticPersistentMethod.java:72) 
at org.grails.datastore.gorm.finders.FinderMethod$invoke$0.call(Unknown Source) 
at org.grails.datastore.gorm.GormStaticApi$_methodMissing_closure2.doCall(GormStaticApi.groovy:102) 
at org.grails.datastore.gorm.GormStaticApi$_methodMissing_closure2.call(GormStaticApi.groovy) 
at org.codehaus.groovy.runtime.metaclass.ClosureStaticMetaMethod.invoke(ClosureStaticMetaMethod.java:59) 
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) 
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:43) 
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:88) 
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 
at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:55) 
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) 
at com.example.Product$__clinit__closure1_closure2.doCall(Product.groovy:24) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254) 
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) 
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1086) 
at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110) 
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:910) 
at groovy.lang.Closure.call(Closure.java:411) 
at com.example.Product$__clinit__closure1_closure2.call(Product.groovy) 
at org.codehaus.groovy.grails.validation.ValidatorConstraint.processValidate(ValidatorConstraint.java:85) 
at org.codehaus.groovy.grails.validation.AbstractConstraint.validate(AbstractConstraint.java:107) 
at org.codehaus.groovy.grails.validation.ConstrainedProperty.validate(ConstrainedProperty.java:960) 
at org.codehaus.groovy.grails.validation.GrailsDomainClassValidator.validatePropertyWithConstraint(GrailsDomainClassValidator.java:209) 
at org.codehaus.groovy.grails.validation.GrailsDomainClassValidator.validate(GrailsDomainClassValidator.java:79) 
at org.codehaus.groovy.grails.orm.hibernate.validation.HibernateDomainClassValidator.validate(HibernateDomainClassValidator.java:65) 
at org.codehaus.groovy.grails.validation.GrailsDomainClassValidator.validate(GrailsDomainClassValidator.java:118) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.ValidatePersistentMethod.doInvokeInternal(ValidatePersistentMethod.java:119) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractDynamicPersistentMethod.invoke(AbstractDynamicPersistentMethod.java:63) 
at org.codehaus.groovy.grails.orm.hibernate.AbstractHibernateGormValidationApi.validate(AbstractHibernateGormValidationApi.groovy:57) 
at com.example.Product.validate(Product.groovy) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254) 
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener$8.call(ClosureEventListener.java:362) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener$8.call(ClosureEventListener.java:334) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener.doWithManualSession(ClosureEventListener.java:327) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener.onPreInsert(ClosureEventListener.java:334) 
at org.codehaus.groovy.grails.orm.hibernate.EventTriggeringInterceptor.onPreInsert(EventTriggeringInterceptor.java:153) 
at org.codehaus.groovy.grails.orm.hibernate.EventTriggeringInterceptor.onPersistenceEvent(EventTriggeringInterceptor.java:79) 
at org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener.onApplicationEvent(AbstractPersistenceEventListener.java:47) 
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:96) 
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:334) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor.publishEvent(ClosureEventTriggeringInterceptor.java:159) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor.onPreInsert(ClosureEventTriggeringInterceptor.java:120) 
at org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:160) 
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:65) 
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor.performSaveOrReplicate(ClosureEventTriggeringInterceptor.java:246) 
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) 
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129) 
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) 
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) 
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117) 
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor.onSaveOrUpdate(ClosureEventTriggeringInterceptor.java:104) 
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:685) 
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:677) 
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:673) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.SavePersistentMethod$1.doInHibernate(SavePersistentMethod.java:58) 
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) 
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:339) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.SavePersistentMethod.performSave(SavePersistentMethod.java:56) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractSavePersistentMethod.doInvokeInternal(AbstractSavePersistentMethod.java:215) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractDynamicPersistentMethod.invoke(AbstractDynamicPersistentMethod.java:63) 
at org.codehaus.groovy.grails.orm.hibernate.HibernateGormInstanceApi.save(HibernateGormInstanceApi.groovy:195) 
at com.example.Product.save(Product.groovy) 
at com.example.Product$save.call(Unknown Source) 
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) 
at com.example.ProductService.$tt__createTestProducts(ProductService.groovy:21) 
at com.example.ProductService$_createTestProducts_closure1.doCall(ProductService.groovy) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254) 
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) 
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1086) 
at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110) 
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:910) 
at groovy.lang.Closure.call(Closure.java:411) 
at com.example.ProductService$_createTestProducts_closure1.call(ProductService.groovy) 
at groovy.lang.Closure.call(Closure.java:427) 
at com.example.ProductService$_createTestProducts_closure1.call(ProductService.groovy) 
at org.codehaus.groovy.grails.orm.support.GrailsTransactionTemplate$1.doInTransaction(GrailsTransactionTemplate.groovy:62) 
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:131) 
at org.codehaus.groovy.grails.orm.support.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:59) 
at com.example.ProductService.createTestProducts(ProductService.groovy) 
at com.example.ProductService$createTestProducts.call(Unknown Source) 
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112) 
at BootStrap$_closure1.doCall(BootStrap.groovy:20) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254) 
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) 
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1086) 
at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110) 
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:910) 
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:960) 
at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110) 
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:910) 
at groovy.lang.Closure.call(Closure.java:411) 
at groovy.lang.Closure.call(Closure.java:405) 
at grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.java:308) 
at grails.util.Environment.executeForEnvironment(Environment.java:301) 
at grails.util.Environment.executeForCurrentEnvironment(Environment.java:277) 
at org.codehaus.groovy.grails.commons.DefaultGrailsBootstrapClass.callInit(DefaultGrailsBootstrapClass.java:60) 
at org.codehaus.groovy.grails.web.context.GrailsConfigUtils.executeGrailsBootstraps(GrailsConfigUtils.java:75) 
at org.codehaus.groovy.grails.web.context.GrailsContextLoader.initWebApplicationContext(GrailsContextLoader.java:109) 
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4961) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5455) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 
14:14:21,141 ERROR GrailsContextLoader: Error initializing the application: null id in com.example.Product entry (don't flush the Session after an exception occurs) 
org.hibernate.AssertionFailure: null id in com.example.Product entry (don't flush the Session after an exception occurs) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:82) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:190) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:147) 
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219) 
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99) 
at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58) 
at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1185) 
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1709) 
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.FindAllByPersistentMethod$1.doInHibernate(FindAllByPersistentMethod.java:113) 
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) 
at org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:343) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.FindAllByPersistentMethod.doInvokeInternalWithExpressions(FindAllByPersistentMethod.java:73) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractClausedStaticPersistentMethod.doInvokeInternal(AbstractClausedStaticPersistentMethod.java:527) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractClausedStaticPersistentMethod.doInvokeInternal(AbstractClausedStaticPersistentMethod.java:401) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractStaticPersistentMethod.invoke(AbstractStaticPersistentMethod.java:79) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractStaticPersistentMethod.invoke(AbstractStaticPersistentMethod.java:72) 
at org.grails.datastore.gorm.finders.FinderMethod$invoke$0.call(Unknown Source) 
at org.grails.datastore.gorm.GormStaticApi$_methodMissing_closure2.doCall(GormStaticApi.groovy:102) 
at org.grails.datastore.gorm.GormStaticApi$_methodMissing_closure2.call(GormStaticApi.groovy) 
at org.codehaus.groovy.runtime.metaclass.ClosureStaticMetaMethod.invoke(ClosureStaticMetaMethod.java:59) 
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) 
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:43) 
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:88) 
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 
at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:55) 
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) 
at com.example.Product$__clinit__closure1_closure2.doCall(Product.groovy:24) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254) 
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) 
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1086) 
at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110) 
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:910) 
at groovy.lang.Closure.call(Closure.java:411) 
at com.example.Product$__clinit__closure1_closure2.call(Product.groovy) 
at org.codehaus.groovy.grails.validation.ValidatorConstraint.processValidate(ValidatorConstraint.java:85) 
at org.codehaus.groovy.grails.validation.AbstractConstraint.validate(AbstractConstraint.java:107) 
at org.codehaus.groovy.grails.validation.ConstrainedProperty.validate(ConstrainedProperty.java:960) 
at org.codehaus.groovy.grails.validation.GrailsDomainClassValidator.validatePropertyWithConstraint(GrailsDomainClassValidator.java:209) 
at org.codehaus.groovy.grails.validation.GrailsDomainClassValidator.validate(GrailsDomainClassValidator.java:79) 
at org.codehaus.groovy.grails.orm.hibernate.validation.HibernateDomainClassValidator.validate(HibernateDomainClassValidator.java:65) 
at org.codehaus.groovy.grails.validation.GrailsDomainClassValidator.validate(GrailsDomainClassValidator.java:118) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.ValidatePersistentMethod.doInvokeInternal(ValidatePersistentMethod.java:119) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractDynamicPersistentMethod.invoke(AbstractDynamicPersistentMethod.java:63) 
at org.codehaus.groovy.grails.orm.hibernate.AbstractHibernateGormValidationApi.validate(AbstractHibernateGormValidationApi.groovy:57) 
at com.example.Product.validate(Product.groovy) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254) 
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener$8.call(ClosureEventListener.java:362) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener$8.call(ClosureEventListener.java:334) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener.doWithManualSession(ClosureEventListener.java:327) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener.onPreInsert(ClosureEventListener.java:334) 
at org.codehaus.groovy.grails.orm.hibernate.EventTriggeringInterceptor.onPreInsert(EventTriggeringInterceptor.java:153) 
at org.codehaus.groovy.grails.orm.hibernate.EventTriggeringInterceptor.onPersistenceEvent(EventTriggeringInterceptor.java:79) 
at org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener.onApplicationEvent(AbstractPersistenceEventListener.java:47) 
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:96) 
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:334) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor.publishEvent(ClosureEventTriggeringInterceptor.java:159) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor.onPreInsert(ClosureEventTriggeringInterceptor.java:120) 
at org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:160) 
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:65) 
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor.performSaveOrReplicate(ClosureEventTriggeringInterceptor.java:246) 
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) 
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129) 
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) 
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) 
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117) 
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) 
at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor.onSaveOrUpdate(ClosureEventTriggeringInterceptor.java:104) 
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:685) 
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:677) 
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:673) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.SavePersistentMethod$1.doInHibernate(SavePersistentMethod.java:58) 
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) 
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:339) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.SavePersistentMethod.performSave(SavePersistentMethod.java:56) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractSavePersistentMethod.doInvokeInternal(AbstractSavePersistentMethod.java:215) 
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractDynamicPersistentMethod.invoke(AbstractDynamicPersistentMethod.java:63) 
at org.codehaus.groovy.grails.orm.hibernate.HibernateGormInstanceApi.save(HibernateGormInstanceApi.groovy:195) 
at com.example.Product.save(Product.groovy) 
at com.example.Product$save.call(Unknown Source) 
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) 
at com.example.ProductService.$tt__createTestProducts(ProductService.groovy:21) 
at com.example.ProductService$_createTestProducts_closure1.doCall(ProductService.groovy) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254) 
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) 
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1086) 
at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110) 
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:910) 
at groovy.lang.Closure.call(Closure.java:411) 
at com.example.ProductService$_createTestProducts_closure1.call(ProductService.groovy) 
at groovy.lang.Closure.call(Closure.java:427) 
at com.example.ProductService$_createTestProducts_closure1.call(ProductService.groovy) 
at org.codehaus.groovy.grails.orm.support.GrailsTransactionTemplate$1.doInTransaction(GrailsTransactionTemplate.groovy:62) 
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:131) 
at org.codehaus.groovy.grails.orm.support.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:59) 
at com.example.ProductService.createTestProducts(ProductService.groovy) 
at com.example.ProductService$createTestProducts.call(Unknown Source) 
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112) 
at BootStrap$_closure1.doCall(BootStrap.groovy:20) 
[...] 

Он падает на линии def products = Product.findAllByFirmData(object.firmData).

Как это исправить? Почему это происходит?

+0

Пожалуйста, добавьте код Bootstrap, где вы добавляете данные – quindimildev

+0

Я использовал простой '(новый продукт (mapWithAllParameters)). Save()', но я уже нашел решение этой проблемы. Проверьте мой ответ с помощью flushMode. –

+0

Да. Понимаю. Но обычно вам не нужно это делать. Кажется, вы что-то нарушаете транзакционный поток. – quindimildev

ответ

0

Я не знал, что валидаторы выполняются так часто. Решение:

import org.hibernate.FlushMode

и чем в пользовательских FlushMode изменения валидатор во время извлечения данных из БДА, (чтобы избежать ненужных изменений промывки):

percentOfIncome (range: 0..100, validator: {value, object -> 
    def products = Product.findAllByFirmData(object.firmData, [flushMode: FlushMode.MANUAL]) 
    def sumOfIncome = (products?.percentOfIncome?.sum() ?: 0) + object.percentOfIncome 
    return (sumOfIncome <= 100) 
     }) 
Смежные вопросы