在我的服务中,我期望某种异常(DataIntegrityViolationException
),这是数据库上唯一的阻止插入的结果。可以,并且可以实际发生。我一直在使用Grails控制台来获取正确的异常类型,以便从那里继续。但是,我收到此消息:
org.hibernate.AssertionFailure: null id in
<my-domain-class> entry (don't flush the Session after an exception occurs)
现在,我不确定之后如何继续。即使发生此特定错误,我也需要在其他表中执行一些删除操作-基本上,我认为插入工作正常,并且代码仅从那里继续。
从Hibernate的 Angular 来看,发生这种错误之后是否安全?我必须怎么做才能进入一致状态,以便对其他服务的进一步调用(但仍是相同的HTTP请求)可以正确执行HQL语句?
编辑
基本工作流程:
最佳答案
发生此类异常后, session 可能处于无效状态。任何后续的持久性操作都应与新 session 一起执行。您可以使用以下命令在Grails中打开一个新 session :
SomeDomainClass.withNewSession {
// code that uses the new session goes here
}