编辑:得到-1,你能解释一下原因吗?我搜索了重复项,没有发现任何内容。
针对刚刚遇到的问题发布问答:
class Pineapple {
def pineappleService
Supplier supplier;
def beforeInsert() {
pineappleService.beforeInsert(this);
}
}
class PineappleService {
def beforeInsert(Pineapple pineapple) {
Pineapple.withNewSession {
// some logic
pineapple.supplier.save();
}
}
}
例外:
org.hibernate.AssertionFailure:xyz中的null id(发生异常后不要刷新会话)
答案 0 :(得分:3)
诀窍是将闭包移动到域类:
class Pineapple {
def pineappleService
Supplier supplier;
def beforeInsert() {
Pineapple.withNewSession {
pineappleService.beforeInsert(this);
}
}
}
class PineappleService {
def beforeInsert(Pineapple pineapple) {
// some logic
pineapple.supplier.save();
}
}
文档:
注意上面使用withNewSession方法。因为事件是 在Hibernate使用持久化方法冲洗时触发了 除非您运行,否则save()和delete()不会导致保存对象 使用新会话进行操作。
幸运的是,withNewSession方法允许您共享相同的内容 事务性JDBC连接,即使您使用的是另一种 基础会议。