JPA更新多对多删除记录

2023-12-24

我在两个实体之间有 @ManyToMany 关系。当我在拥有方执行更新时,JPA 似乎从我的数据库中删除了所有链接记录并重新插入它们。对我来说这是一个问题,因为我有一个在删除记录之前触发的 MySQL 触发器。关于如何解决这个问题有什么想法吗?

@Entity
public class User {

    @Id
    @Column(name="username")
    private String username;

    ...

    @ManyToMany
    @JoinTable(name="groups", joinColumns=
        @JoinColumn(name="username", referencedColumnName="username"),
            inverseJoinColumns=@JoinColumn(name="groupname",
                    referencedColumnName="type_id"))
    private List<UserType> types;

    ...

}

@Entity
public class UserType {

    @Id
    @Column(name="type_id")
    private String id;

    @ManyToMany(mappedBy="types")
    private List<User> users;

    ...
} 

Use Set代替List解决了问题。但我不知道为什么它有效。

Hibernate提供的另一个解决方案是拆分@ManyToMany关联成两个双向@OneTo@Many关系。看Hibernate 5.2 文档 https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#associations-many-to-many-bidirectional-with-link-entity例如。

如果是双向@OneToMany当关联表现得更好时 删除或更改子元素的顺序,@ManyToMany关系不能从这种优化中受益,因为 外键端不受控制。为了克服这个限制, 链接表必须直接公开,并且@ManyToMany协会 分成两个双向@OneToMany关系。

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

JPA更新多对多删除记录 的相关文章

随机推荐

  • 由于环境错误而无法安装软件包:[Errno 30] 只读文件系统:

    我正在尝试遵循这个安装 python 模块 但是我似乎没有安装虚拟环境或 pip 所以我试图让它们继续 Python 2 7 5 安装在我的 cpanel 上 我想为我的脚本安装额外的模块 我下载 get pip py using curl
  • 用 XSLT 替换节点文本?

    下面是我的 XML 文件 用于存储数据
  • Scala 中“null == last”和“null eq last”有什么区别?

    我在内置类中看到MessageQueue scalascala 2 7 7 的第 164 行左右 它是 def extractFirst p Any gt Boolean MessageQueueElement changeSize 1 a
  • iPhone-如何将 Storyboard 与自定义 UITableView 单元格和 CellWithIdentifier 一起使用

    我正在尝试利用新的故事板设计器和绘制 UITableView 单元格的简便性 而不是以编程方式 设计 每一行 标准单元的一个很好的例子在堆栈溢出链接 iPhone dequeueReusableCellWithIdentifier 用法 h
  • Hbase shell - 如何写入字节值

    我想在 hbase 中写入一个值 65 为此 我必须在 hbase shell 上运行以下命令 put table key cf qual A 但是有没有办法直接写成这样 put table key cf qual 65 this is n
  • C++ - 结构与类[重复]

    这个问题在这里已经有答案了 可能的重复 C C 结构与类 https stackoverflow com questions 2750270 c c struct vs class C 中的 POD 类型是什么 https stackove
  • 将 HTML 导出到 Excel 而不丢失格式

    我有一个生成报告的 asp net 页面 无论好坏 整个事情都是使用嵌套表生成的 我能够将页面导出到 Excel 但是我丢失了所有格式 无法设置列宽等 有办法处理这个问题吗 我愿意添加 html 方面所需的任何愚蠢的 MS Office 特
  • 在 SQL 查询中执行正则表达式(替换)

    将所有 lt 替换为的最佳方法是什么 lt 在给定的数据库列中 基本上执行s lt lt gi Notes 必须工作于微软SQL服务器 http en wikipedia org wiki Microsoft SQL Server SQL
  • Laravel - 未定义的偏移量 0 - collection.php

    我正在编写一个网络应用程序 后端是一个基于 Laravel 4 的 RESTFul 应用程序 我在使用特定控制器时遇到问题 BedsController php class BedsController extends BaseContro
  • RPY2:导入程序因 .Renviron 失败

    这是使用时应该发生的事情rpy2 robjects packages importr对于基础 R 包 例如stats gt gt gt from rpy2 robjects packages import importr gt gt gt
  • 量角器 - 描述未定义

    我正在使用 Protractor js 进行测试 当我尝试使用运行测试用例时 量角器 e2e main test spec js 我的conf js An example configuration file exports config
  • DatePicker 不更新 Android 中的 Textview

    当选择某个日期的日期选择器时 我试图更新文本视图 但它的textview 没有更新 我正在使用两个日期选择器来更新两个不同的文本视图 这是我更新 TextView 的代码 public class SearchingActivity ext
  • wxPython CheckListBox 与 HTML

    我正在使用 wxPython 创建一个 GUI 应用程序 现在我正在使用 wx CheckListBox 来显示带有复选框的选项 但我希望使用 HTML 来格式化 CheckListBox 中的文本 解决这个问题的最佳方法是什么 Repla
  • 如何滚动重启一群杂种集群

    任何人都知道一种通过 Capistrano 以 滚动 方式重新启动杂种集群的好方法 例如一次一个杂种 如果每个人都有一点等待时间 让杂种也能加载 Rails 应用程序 那就太好了 我已经做了一些搜索 但没有找到太多 所以在我自己深入研究 m
  • 我可以使用 boost 库来执行跨平台应用程序吗?

    boost c 库中是否有任何 WinAPI WinExec 模拟 我需要从我的程序运行可执行文件 并将参数传递给它 我应该为此使用任何其他跨平台库 还是自己处理我的程序编译的操作系统 重要的 请参阅末尾的 POSIX 系统更新
  • 为什么我会收到有关此代码示例的警告?什么才是正确的呢?

    我正在学习一些 C 并且正在阅读scanf from 本教程 http www tutorialspoint com c standard library c function scanf htm其中包含以下代码块 include
  • WCF NetTcpBinding 缓冲与流性能问题

    我编写了一个 WCF 服务 该服务应该使用 Streamed TransferMode 转换任何大小的文件NetTcpBinding and System IO Stream object 在运行性能测试时 我发现了明显的性能问题 然后我决
  • 如何设置带空格的环境变量?

    我需要使用批处理文件设置环境变量的值 我为此编写了脚本 echo off set value Hello world setx M srijani srijani value 它给出了错误 ERROR Invalid syntax Defa
  • 重命名字典键

    有没有一种方法可以重命名字典键 而无需将其值重新分配给新名称并删除旧名称键 并且不迭代 dict 键 值 的情况下OrderedDict https docs python org 3 library collections html co
  • JPA更新多对多删除记录

    我在两个实体之间有 ManyToMany 关系 当我在拥有方执行更新时 JPA 似乎从我的数据库中删除了所有链接记录并重新插入它们 对我来说这是一个问题 因为我有一个在删除记录之前触发的 MySQL 触发器 关于如何解决这个问题有什么想法吗