JPA (Hibernate) + Spring:处理唯一约束违规

2024-03-11

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

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

如果出现重复,应用程序应该默默地选择已经存在的实体。我现在的问题是我应该做什么,特别是在保存包含 As 列表的实体时。

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

我不确定这是否容易实现,因为 DataIntegrityViolationException 不包含任何易于处理的信息,例如在级联持续存在的情况下受影响的实体!

  • 保存前检查(持久化)并将提交的实体替换为现有实体(具有 id 集)

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

更好的方法是什么?


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA (Hibernate) + Spring:处理唯一约束违规 的相关文章

  • 为什么 hibernate 在 SAVE 之前执行 SELECT?

    为什么 hibernate 在保存对象之前要进行选择 我在互联网上找不到有用的信息 这是每次保存之前的正常行为吗 我发现这个话题 选择 hibernateTemplate save 的查询运行 https stackoverflow com
  • Set 内元素的 Hibernate 标准

    我有一个实体 其中包含一组另一个实体 Entity1 包含集合EntityTwos 我想为entityTwos 中的 id 字段创建搜索条件 我搜索过 但没有得到任何答案 有人有主意吗 谢谢 斯里 很容易 就像是 criteria crea
  • 没有@Id的休眠/持久化

    我有一个数据库视图 它生成的结果集没有真正的主键 我想使用 Hibernate Persistence 将此结果集映射到 Java 对象 当然 因为没有PK 所以我不能用 Id 部署时 Hibernate 抱怨缺少 Id 我该如何解决这个问
  • 通过 org.springframework.orm.hibernate4.LocalSessionFactoryBean 创建 HibernateTemplate

    我使用 Spring 3 1 Hibernate 4 我创建了以下内容sessionFactory
  • 为 JpaTransactionManager 启用日志记录

    我在 spring 3 5 容器内使用 JpaTransactionManager 和 hibernate 3 我无法启用 JPA 日志记录 我希望查看事务管理日志以调试我的某些服务 我正在使用 log4j 这是我的 log4j prope
  • 不可靠网络和低带宽的 Java ORM 策略

    我正在寻找 Hibernate 作为需要在不可靠网络中工作的系统 我们需要对一个中央数据库进行读写访问 但它可以通过一个相当不稳定的 Wi Fi 网络来访问 此外 可能会出现断电而导致应用程序无法完全关闭的情况 因此任何解决方案都必须具有能
  • Hibernate OneToMany 关系是 PersistentBag 而不是 List

    我正在 javafx 中开发一个应用程序 它通过 RMI 与 EAR 连接 该 EAR 连接到 SQLServer DB 并使用 hibernate 映射 POJOS 这些 POJOS 包含双向 OneToMany 和 ManyToOne
  • Java SE + Spring Data + Hibernate

    我正在尝试使用 Spring Data Hibernate 启动 Java SE 应用程序 并且到目前为止已经完成了以下操作 配置文件 Configuration PropertySource classpath hibernate pro
  • 具有 JPA、PostgreSQL 和 NULL 值的 JodaTime

    我试图将 JPA 的 JodaTime DateTime 字段保留到 PostgreSQL 但遇到了指向数据库 NULL 值的空指针的问题 我正在使用 NetBeans 7 beta 2 IDE 持久性实现是 EclipseLink 2 2
  • Spring Data (JPA) 多个存储库,没有很多类

    在我当前的项目中 我使用 Spring Data JPA 并且有 20 多个 Entity类 我想为它们创建存储库 但创建另一个类 每个类适用于任何模型 Repository注释似乎是某种矫枉过正和大量 重复 代码 所有存储库类将如下所示
  • JBAS014544:找不到带接口的 EJB

    我是 Java EE 新手 正在使用 JBoss 7 创建我的第一个项目 我的工作区中有一个 EAR 项目 一个 EJB 项目 WEB 项目和一个 JPA 项目 EJB 项目中创建的 ejb 想要使用 JPA 项目中创建的 ejb 一切都编
  • ManyToOne 关系上的 Hibernate @Where 注释

    我最近开始重构我的项目 因为我必须在一些表中添加额外的列 额外的列是一个枚举 待定或活动 由于这一更改 我现在需要重构所有查询 以便仅在状态为 活动 时检索行 经过一些研究 我发现我们可以使用 Where 注释来注释实体 当我在简单的列上使
  • JPA更新一对多关系列表

    我有一个 Question 实体 其中包含另一个名为 Alternatives 的实体的列表 如下所示 public class Question OneToMany fetch FetchType LAZY mappedBy questi
  • 尽管 JPA Converter 可用,但 org.hibernate.MappingException

    我有一个自己的 Id 类型 public class Id
  • Hibernate @OneToMany 注释到底是如何工作的?

    我对 Hibernate 还很陌生 我正在通过教程学习它 我在理解到底如何一对多注释作品 所以我有这两个实体类 Student代表一个学生并且Guide代表指导学生的人 因此 每个学生都与一名向导相关联 但一名向导可以跟随多个学生 我想要一
  • H2控制台看不到JAVA创建的表

    我已经从以下位置下载了 H2 控制台http www h2database com html download html http www h2database com html download html我已经在我的中配置了 URLjdb
  • 获取列名称以及 JSON 响应

    我有三个实体类 我编写了包含两个表的联接的查询 表 费用类别 Entity Table name ExpensesCategories public class ExpensesCategories Id GeneratedValue st
  • 使用 JPA 标准 API 进行日期比较

    我有一个包含两个日期的范围日期选择器 start and end 其中两者都可以为空 我想过滤一张表 其中实体具有确切的一个日期 date 所以 这里有一些例子 我愿意匹配 想象要匹配的日期是当前日期 17 07 2016 空 17 07
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho

随机推荐

  • 在rails中执行AJAX Post而不传递authenticity_token

    所以我记得有一次 当我尝试做一篇 AJAX 帖子时 我必须将 form authenticity token 作为数据之一传递给 Rails 由于某种原因 不这样做会产生某种错误 我会立即注销 有没有办法仍然拥有这个真实性令牌用于表单提交但
  • 如何在 htaccess 中启用阿拉伯语 slug?

    我有一个多语言网站 我正在尝试创建一个友好的 URL 在我的数据库中 我有slug场地 当文章的标题是英文时 slug 会出现在 url 中 并且重定向工作正常 但当标题是阿拉伯语时 会出现 slug 并且重定向显示 未找到对象 page
  • 请解释闭包,或将循环计数器绑定到函数范围

    我见过程序员使用计数器在循环内分配事件侦听器 我相信这是语法 for var i 0 i lt someArray length i someArray i onclick function i Some code using i i 有人
  • Material ui 'new' v5.0.0jectFirst 无法设置特异性

    MUI v5 0 0今天发布了 在我的尖峰分支中 我正在尝试更新到新版本 我正在执行 mui docs 中详细的步骤here https mui com guides migration v4 theme 我在用styled compone
  • 如何自动化 Google 主页自动建议?

    这是我的测试类 包含所有代码行 我认为问题出在 xpath 中 因为它无法找到元素 package practice import java util List import org openqa selenium By import or
  • 错误 E QUERY [thread1] 语法错误:使用和/或使用 find() 的属性 id @(shell) 无效

    我在使用此查询时收到错误 db a find or name aekansh age 21 pretty 作为 E 查询 thread1 语法错误 无效的属性 id shell 1 11 集合 a 将数据存储为 id 10 name aek
  • Firestore PERMISSION_DENIED

    当我在 macOS 上编写 flutter 应用程序时遇到这个问题 相同的基本代码在我的 Windows 电脑中工作 但在 macOS 中不起作用 正如您在我的日志中看到的 应用程序已连接 但我仍然无法对我的 Firestore 数据库发出
  • iPhone DropBox API:如何加载文件?

    关于 dropBox 集成到 iPhone 应用程序中的一个非常基本的问题 我按照 DropBoxSDK 的设置进行操作 一切正常 我可以登录我的帐户并将其链接 所以我正确地设置了一切 现在我想用它简单地从 dropBox 加载文件并再次保
  • JSF 错误消息和程序卡住。 JSON 解析错误和 primefaces

    我在facelets中有以下形式
  • 使用Java DSL的Camel CXF POJO模式

    我有一个预先存在的 Web 服务 连接 SOAP 如果可能的话 我想在不使用 Swing 框架的情况下进行调用 我遵循接触优先开发 使用 cxf wsdl2java 工具生成我的 java 文件 我希望从 java 对象中提取用户名和密码并
  • 从 C# 创建 COM 索引属性?

    我正在尝试用新的 net dll 来模仿旧的 vb6 dll 模仿必须是完美的 以便调用者不知道他们正在使用新的 dll 不过我有一个好奇心 在 VB6 中 对象库中有以下内容 Property BankList Index As Long
  • std::bad_Optional_access 是针对异常的小犯罪吗?

    If std optional s value 成员函数被调用时optional没有初始化实际值 astd bad optional access被抛出 因为它直接源自std exception 你需要catch std bad optio
  • Java 泛型和接口

    有这样的设计 interface Foo
  • 如何向 iPhone 应用程序添加注销功能?

    我有一个具有以下布局的应用程序 当您打开应用程序时 您会看到登录屏幕 您登录后会看到一个包含 3 个选项卡的选项卡栏 登录视图在选项卡栏的appdelegate中显示为presentModalView 在第三个选项卡中有一个注销按钮 我希望
  • Python ctypes:复制结构的内容

    我想用 ctypes 在 Python 中模仿一段 C 代码 代码如下 typedef struct int x int y point void copy point point a point b a b 在 ctypes 中不可能执行
  • __init__() 缺少 1 个必需的位置参数

    我正在努力学习Python 这是一个非常简单的代码 我在这里想做的就是调用类的构造函数 初始化一些变量并打印该变量 但它给了我一个错误 missing 1 required positional argument class DHT def
  • 在 Mac OS 中使用 JAVA 注册表

    我写了一个Java桌面应用程序在Windows正在使用的平台Windows注册表保存应用程序信息 例如应用程序位置 时间段 例如最多 30 天的免费试用 等 现在 我想创建相同的java应用程序来运行Mac OS 虽然大多数java代码是相
  • 为什么一个文件对象刷新,而另一个文件对象不刷新?

    我想要一个在写入数据时直接刷新到文件的文件对象 并写道 class FlushingFileObject file def write self args kwargs return val file write self args kwa
  • 通过点击铅笔调用监听器(primefaces 2.2.1 rowEditor)

    在 rowEditor 上单击铅笔后如何调用侦听器 我想从 dataTable 中准备文本进行编辑 清除制表符和回车符的 html 标签 你有什么想法 谢谢 实际上 数据表中没有铅笔事件 如果你想在铅笔点击后调用监听器 你可以这样做 将 r
  • JPA (Hibernate) + Spring:处理唯一约束违规

    我有一个具有唯一字段的实体 A 该字段基本上定义了该实体 这意味着它是相等的 那么实体也完全相同 第二点是 如果违反该约束 那么绝不是例外 这意味着完全可以预期用户会尝试输入重复项 如果出现重复 应用程序应该默默地选择已经存在的实体 我现在