当前位置: 首页 > 知识库问答 >
问题:

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

须衡虑
2023-03-14

编辑:得到一个-1,你能解释一下为什么吗?我搜索了重复项,但没有找到任何重复项。

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

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: null id in xyz (在发生异常后不要刷新会话)

共有1个答案

东方旺
2023-03-14

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

class Pineapple {
    def pineappleService

    Supplier supplier;

    def beforeInsert() {
        Pineapple.withNewSession {
            pineappleService.beforeInsert(this);
        }
    }
}

class PineappleService {
    def beforeInsert(Pineapple pineapple) {
         // some logic
         pineapple.supplier.save();
    }
}

文档:

    < li>GORM:事件和自动时间戳

请注意上面 withNewSession 方法的用法。由于事件是在 Hibernate 使用 save() 和 delete() 等持久性方法刷新时触发的,因此除非您使用新会话运行操作,否则不会导致保存对象。

幸运的是,withNewSession方法允许您共享相同的事务性JDBC连接,即使您使用的是不同的底层会话。

    < Li > https://grails . github . io/grails-doc/latest/ref/Domain Classes/with new session . html
 类似资料:
  • 问题内容: 当取消注释时,我们将在第二种方法中获得en异常- 当作者。 为什么会这样呢? 问题答案: 问题似乎是Hibernate引发了一个异常(因此当前事务无效),但是随后您尝试在该会话中继续执行更多操作。 正确的方法是将您使用的测试分为2部分,一部分测试空作者,另一部分测试有效作者。 在生产代码(例如控制器)上,您需要重新启动操作(关闭事务,重新启动流程)才能继续。但是,考虑到游戏管理交易的方

  • 我设置了一个非常基本的Grails 3 web应用程序,使用jdbc连接到PostgreSQL数据库。下面您可以找到< code>Cluster域类和专用服务的代码。 碰巧用同一个< code>slug参数调用了< code>createCluster方法两次: 导致以下异常 我以为违反一约束会被方法拦截,但显然我错了。好吧,所以我添加了一个try/catch,但它基本上没有效果,异常没有被包装,

  • 我有一个hibernate和JSF2应用程序进入部署服务器,突然抛出一个org。冬眠AssertionFailure:异常中的空id。我将立即提供堆栈跟踪和代码,但首先有四个重要问题: > 这只发生在部署服务器(Jboss)上 研究这一点,人们在尝试插入对象时似乎会出现这种错误。但是当我做一个简单的查询时,我得到了错误。(实际上,各种不同的查询,因为错误会随机出现在多个页面上。) 错误只会偶尔出现

  • 你好,我是PHP中的web开发人员,最近迁移到javaEE。我在mysql中创建表。这是第一类: . . . 这是我的第二节课: . . .

  • 我对Hibernate和JPA存储库的实现有问题。 我得到了关于错误: "发生异常后不要刷新会话" 这是从第节开始的- 消息表: 用户表: 服务: 可能这就是问题所在——这是一个例外。会议仍然开放。当然,我在服务中有事务注释。 以及执行日志:

  • 我试图在一个catch块中执行一些更新操作。冬眠例外ConstraintViolationException抛出如下 我正在使用Hibernate 4.3.6 这是我的UserRegistrationRequest实体 这是我的UserSecurityQuestions实体 尝试在catch块中执行更新时,我遇到以下错误 如果我抓住异常而不是约束违反异常看到下面的错误 有人能帮帮我吗,有没有更好的