gpt4 book ai didi

hibernate - 替代grails多列唯一约束(乐观插入)

转载 作者:行者123 更新时间:2023-12-02 16:02:28 25 4
gpt4 key购买 nike

我有一个使用量很大的域类Relationship,看起来与以下代码非常相似

class Relationship {
Element source
Element destination
Type type

// other properties omitted

static constraints = {
type unique: ['source', 'destination']
}
}

我有一个服务创建此域类的新实例,该服务将检查现有实例,如果找到则重用它们,但是我想仅在数据库中实施具有唯一约束的乐观插入,因为
  • GORM唯一约束非常低效(对于一个简单的任务,仅检查约束并花费了三分之一的时间,我得到了13 000次点击)
  • 批量运行时,发现现有实体的成本很高(每个查询刷新当前 session ,花费约40ms)

  • 所以这个想法是让 save方法失败,而不是重用现有实体
    try {
    relationshipInstance.save()
    } catch (DataIntegrityViolationException | ConstraintViolationException e) {
    // find and reuse
    }

    但是,当我尝试找到实体时,却出现了休眠异常
    AssertionFailure: null id in Relationship entry (don't flush the Session after an exception occurs)
  • 有什么方法可以从异常中恢复(relationshipInstance.discard()没有帮助,因为它没有EntityKey)?
  • 您会建议其他什么解决方案来按需进行唯一性检查而不触发冲洗?
  • 最佳答案

    您可以在调用保存时禁用验证,如下所示:

    relationshipInstance.save(validate:false)

    有关更多信息,请参见 documentation for save method

    关于hibernate - 替代grails多列唯一约束(乐观插入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29148220/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com