JPA @EmbeddedId:如何更新复合主键的一部分?

2023-12-08

我有一个多对多关系,其中链接表有一个附加属性。因此,链接表也由实体类表示,称为Composition。主键为Composition is an @Embeddable链接到相应的实体,例如。 2@ManyToOne参考。

用户在选择两个引用中的任何一个时可能会出错,因此必须更新复合主键。然而,由于 JPA(休眠)的工作方式,这当然总是会创建一个新行(插入)而不是更新和旧行Composition仍然会存在。最终结果是添加了新行而不是更新了行。

选项1:

The old Composition可以在插入新版本之前删除,但这需要处理此问题的相应方法需要旧版本和新版本。另外,由于更新的版本实际上是一个新的实体,乐观锁定将不起作用,因此最后的更新将始终获胜。

选项2:

本机查询。该查询还会递增版本列并在 WHERE 子句中包含版本。扔OptimisticLockException如果更新计数为0(并发修改或删除)

什么是更好的选择?解决这个问题的“共同方法”是什么?


为什么不直接更改主键Composition是自动生成的UID吗?然后,用户可以更改对正在加入的实体的两个引用,而无需删除/重新创建Composition实体。然后乐观锁定将被维持。

编辑:例如:

@Entity
@Table(name = "COMPOSITION")
public class Composition {

    @Id
    @Column(name = "ID")
    private Long id;   // Auto-generate using preferred method

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn( .... as appropriate .... )
    private FirstEntity firstEntity;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn( .... as appropriate .... )
    private SecondEntity secondEntity;

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

JPA @EmbeddedId:如何更新复合主键的一部分? 的相关文章

随机推荐

  • 在 Objective C 中使用 ivars 与 Properties 的原因

    我一直无法找到有关此主题的任何信息 并且我所了解的大部分信息完全是偶然的 并且花了几个小时试图找出我的代码无法正常工作的原因 在学习 Objective C 的大多数教程时 我发现变量和属性具有相同的名称 我不明白其重要性 因为似乎该属性完
  • Devise 无法在 Google Chrome 中登录

    我正在使用 Devise gem 在 Ruby on Rails Web 应用程序中进行用户身份验证 该过程非常简单 但是 添加 Nginx 和 ssl 证书后 该应用程序可以在 Mozilla Firefox 中登录 但无法在 Googl
  • jQuery Datepicker - 根据它出现的位置添加类

    我需要在输入元素中添加一个 上方 或 下方 类 具体取决于日期选择器在哪一侧打开 我似乎无法弄清楚如何获取即将创建的日期选择器实例的位置 也许我只是想错了 order main datepicker datepicker showOn bo
  • @font-face 自定义图标字体仅显示 unicodes

    我正在使用 CSS3 的 font face 自定义图标字体 并且在旧版本的 Google Chrome 中 仅显示 unicode 并且不会在我的自定义字体中替换或呈现 该字体显示这些 un icode 的字形 这是我正在使用的 font
  • “使用命名空间 std;”没有任何#include? [复制]

    这个问题在这里已经有答案了 我尝试遵循 它工作没有问题 但在这种情况下 std 没有定义 using namespace std int main 你的代码是非法的 指示using只能提名先前声明的命名空间 即可以通过名称查找找到名称的命名
  • 删除 div 时的 Bootstrap 网格布局

    因此 我正在使用一个仪表板外观 它可能有四个可以打开的 方块 并且角色取决于用户角色 顶行通常保留原样 因此其宽度约为 30 另一行的宽度约为 70 这可以 但是 在仪表板的底行 您可以有两个正方形 当这两个都打开时 我当前的网格设置工作得
  • 过滤对象中的多个值

    我需要按多个值过滤对象 对象示例 items url https id 1693 type ABC currencyCode SEK longName Abc name ABC micCode DEF listingDate 2018 05
  • 使用 numpy 进行数组重新分类

    我有一个包含 10 位数字的大型 50000 x 50000 64 位整数 NumPy 数组 数组中大约有 250 000 个唯一数字 我有第二个重新分类表 它将第一个数组中的每个唯一值映射到 1 到 100 之间的整数 我希望将第一个数组
  • 无法从 Orchard 模块中的项目文件夹加载图像

    我正在尝试在 Orchard 模块中插入图像 但遇到了一些问题 img src Href Modules Orchard Slider Content img other jpg gt 在我看来 我写了这个 但是图像没有加载 它说找不到资源
  • 如何修复 jslint The '&&' subexpression should bewrapped in parens 错误

    我将所有内容都放在括号中 但下面的代码仍然在 jslint 中抛出错误 Problem at line 5 character 104 The subexpression should be wrapped in parens if typ
  • .htaccess 导致所有页面被下载

    我添加了以下行 htaccess AddType application x httpd php html htm 当我尝试加载侧面的任何页面时 我的浏览器会尝试下载该页面 我究竟做错了什么 Thanks 最有可能的 您没有为您的网络服务器
  • 将 JLabels 置于 JPanel 中心

    我正在制作一个记分程序 但遇到了问题 我试图做的是在顶部有一个 JPanel 其中包含两个 JPanel 而 JPanel 又包含两个团队名称 我很困惑为什么程序顶部的两个 JLabel 没有位于它们所包含的 JPanel 内部的中心 im
  • c_str 的使用是否带有异常未定义行为?

    我见过几个类似的代码片段 如下所示 struct MyExcept std exception explicit MyExcept const char m noexcept message m const char what const
  • 如何运行在关闭 PuTTY SSH 会话后仍然运行的 Linux 命令?

    我通过 putty 连接到我的 NAS 它在上面运行 Linux 我想将一个大目录从一个位置移动到另一个位置 关闭 Putty 会话后是否可以保持进程运行 我担心如果我关闭腻子 文件将不会被复制到最后 使用 nohup 开始任务 并使用 将
  • jQuery ui 选项卡中的多个 jQgrid

    我遇到一个问题需要帮助 我有 3 个 jQueryUI 选项卡 第一个包含项目网格 第二个保存工单网格 第三个只是发出警报以验证显示功能是否正常工作 问题是我在第二个选项卡上没有网格 第一个负载正常 如果我注释掉第一个选项卡的代码 第二个网
  • Ruby on Rails:自定义操作

    我是rails新手 所以我向你解释一下我的情况 我有一个用户模型和一个用户控制器 用户使用电子邮件地址和密码登录 特殊用户可以通过在表单中 输入受邀者的电子邮件地址并点击提交来邀请其他用户 然后 受邀用户会收到一封邮件 其中包含用于激活其帐
  • MySQL RAND() 种子值几乎重复

    在 Windows 7 上使用 MySQL 5 6 21 我试图从按日期播种的表中返回 随机 行 因此同一行返回当天 然后切换第二天等 如果您愿意 可以是 当天生成器的随机引用 我注意到相同的行不断出现 因此我将查询简化为基础 看来 RAN
  • GO - WaitGroups 参考中的指针或变量

    根据sync包中的以下函数声明 添加 gt func wg WaitGroup Add delta int 完成 gt func wg WaitGroup Done 等待 gt func wg WaitGroup Wait 我知道它们都是由
  • 如何自动启动 Android 应用程序?

    我不确定如何在 Android 模拟器完成启动后自动启动 Android 应用程序 有人有任何代码片段可以帮助我吗 您必须添加清单权限条目
  • JPA @EmbeddedId:如何更新复合主键的一部分?

    我有一个多对多关系 其中链接表有一个附加属性 因此 链接表也由实体类表示 称为Composition 主键为Composition is an Embeddable链接到相应的实体 例如 2 ManyToOne参考 用户在选择两个引用中的任