gpt4 book ai didi

hibernate - JPA( hibernate )+ Spring : Dealing with unique constraint violations

转载 作者:行者123 更新时间:2023-12-04 12:52:54 29 4
gpt4 key购买 nike

我有一个具有唯一字段的实体 A,该字段基本上定义了实体,这意味着它是相等的,那么实体也完全相同。

第二点是,如果违反了该约束,那绝不是异常(exception)。这意味着完全可以预期用户会尝试输入重复项。

在重复的情况下,应用程序应该默默地选择已经存在的实体。我的问题现在是我应该做什么,尤其是在保存包含 As 列表的实体时。

  • 只需捕获异常并从那里开始

  • 我不确定这是否容易实现,因为 DataIntegrityViolationException 不包含任何易于处理的信息,例如在级联持续的情况下受影响的实体!!!
  • 保存前检查(持久化)并将提交的实体替换为现有实体(具有 id 集)

  • 我更喜欢这个,但是有相当大的开销,因为在每个插入之前可能有多个选择(存在检查)。

    什么是更好的方法?

    最佳答案

    对于选项 1) 你正在寻找类似 http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html 的东西但是该命令在 JPA/hibernate 级别没有任何等效项(我认为这不是 ANSI SQL)。试图捕获异常并“从那里开始”是一个坏主意,因为事务将被回滚,您将不得不经历许多问题才能使其表现得像您想要的那样。

    对于选项 2),我认为这是标准的 JPA/hibernate 实践,您不仅要查询并可能从 DB 加载实体,还要将更改从 transient 对象复制到加载的对象,然后让 JPA 保存你的更新。这很麻烦,您必须小心处理您依赖的任何级联操作,因为您可能需要避免用 transient 对象覆盖持久对象。这是一个复杂的问题,JPA/Hibernate 没有很好的解决方案。

    关于hibernate - JPA( hibernate )+ Spring : Dealing with unique constraint violations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15731297/

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