Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails/GORM:org.hibernate.AssertionFailure:xyz中的null id(发生异常后不要刷新会话)_Hibernate_Grails_Gorm - Fatal编程技术网

Grails/GORM:org.hibernate.AssertionFailure:xyz中的null id(发生异常后不要刷新会话)

Grails/GORM:org.hibernate.AssertionFailure:xyz中的null id(发生异常后不要刷新会话),hibernate,grails,gorm,Hibernate,Grails,Gorm,编辑:得了-1分,你能解释一下原因吗?我找了重复的,没有找到 针对我刚刚遇到的问题发布Q/a: class菠萝{ def菠萝服务 供应商; def beforeInsert(){ 菠萝服务。在此之前插入(此); } } 菠萝类服务{ 插入前def(菠萝菠萝){ 菠萝汁{ //一些逻辑 菠萝。供应商。保存(); } } } 例外情况: org.hibernate.AssertionFailure:xyz中的空id(发生异常后不要刷新会话) 诀窍是将闭包移动到域类: class菠萝{ def菠萝服

编辑:得了-1分,你能解释一下原因吗?我找了重复的,没有找到

针对我刚刚遇到的问题发布Q/a:

class菠萝{
def菠萝服务
供应商;
def beforeInsert(){
菠萝服务。在此之前插入(此);
}
}
菠萝类服务{
插入前def(菠萝菠萝){
菠萝汁{
//一些逻辑
菠萝。供应商。保存();
}
}
}
例外情况:

org.hibernate.AssertionFailure:xyz中的空id(发生异常后不要刷新会话)


诀窍是将闭包移动到域类:

class菠萝{
def菠萝服务
供应商;
def beforeInsert(){
菠萝汁{
菠萝服务。在此之前插入(此);
}
}
}
菠萝类服务{
插入前def(菠萝菠萝){
//一些逻辑
菠萝。供应商。保存();
}
}
文件:

注意上面withNewSession方法的用法。因为事件是 在Hibernate使用持久性方法刷新时触发,如 除非运行save()和delete(),否则不会保存对象 您的操作将与新会话同步

幸运的是,withNewSession方法允许您共享相同的内容 事务性JDBC连接,即使您使用的是不同的 基础会话