hibernate - 在Hibernate异常后可以使用Grails安全的方式执行更多查询吗?

标签 hibernate grails

在我的服务中,我期望某种异常(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语句?

编辑

基本工作流程:
  • 服务A尝试将
  • 插入数据库
  • 不管成功还是失败(唯一违反),服务A都应调用服务B
  • 服务B使用不同的域执行一些选择,然后删除一个重要的
  • Controller 返回
  • 最佳答案

    发生此类异常后, session 可能处于无效状态。任何后续的持久性操作都应与新 session 一起执行。您可以使用以下命令在Grails中打开一个新 session :

    SomeDomainClass.withNewSession {
      // code that uses the new session goes here
    }
    

    关于hibernate - 在Hibernate异常后可以使用Grails安全的方式执行更多查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22841397/

    相关文章:

    grails - 如何在 session 中保存Spring Security登录用户

    sorting - 从Select标记获取值(Grails)

    java - NoSuchMethodError : org. springframework.beans.factory.xml.XmlBeanDefinitionReader

    java - 执行额外查询的 hibernate 条件

    java - Hibernate JTA 多用户 session 事务映射

    grails - 如何在grails中建立一对一的双向关系?

    java - @TableGenerator : how to use

    java - Spring 启动: JPA incorrectly adds where clause

    unit-testing - 如何在grails 2.2.4单元测试中用withCriteria模拟?

    unit-testing - 模拟使用 findAll 的 grails 方法,生成 MissingMethodException