3在grails中获取对象时未保存的瞬态实例

3在grails中获取对象时未保存的瞬态实例,grails,Grails,获取对象时,我得到一个未保存的瞬态实例异常 代码如下: String string = "name1|name2" string.split("[|]").each { if (it) { println it Product p = Product.findByName(it.toUpper

获取对象时,我得到一个未保存的瞬态实例异常

代码如下:

  String string = "name1|name2"
  string.split("[|]").each {
                           if (it) {
                                    println it
                                    Product p = Product.findByName(it.toUpperCase()).save()
                                    if(p) {
                                        Components c =  new Components(product: p).save(failOnError: true, flush: true)
                                        st.addToComponents(c)
                                    }

                                }
                            }
这是个例外

 | Error org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: Product; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: Product
我不明白为什么得到一个物体会导致这种情况。我已检查该对象不在数据库中。但我的FailOnError:true在保存时不会给出任何错误

Product p = Product.findByName(it.toUpperCase()).save()
毫无意义。尝试删除并保存:


另外,在保存该实例之前,请尝试执行c.validate。它可能有验证错误

能否添加更多代码?此代码是在控制器中还是在服务中执行?这是怎么一回事?您正在迭代域对象列表吗?最初用于测试的域对象列表没有、保存并出现相同的错误。请在保存之前尝试验证您的c实例。hibernate会话没有将批处理刷新到数据库似乎有问题。这使得这篇文章显得多余。所以我打开了另一个线程。
Product p = Product.findByName(it.toUpperCase())