JpaRepository删除子元素

2024-01-28

我正在尝试执行一个非常简单的删除操作,但不知何故它不起作用,因为我将 DAO 更新到了 JpaRepository。基本上是这样的:

A a = aRepository.findOne(id);
a.setSomeField("someNewString");

List<B> bList = a.getBs();
bList.clear();
aRepository.saveAndFlush(a);

该字段已按预期更新,但bList保持不变。我什至尝试过:

A a = aRepository.findOne(id);
a.setSomeField("someNewString");

List<B> bList = a.getBs();
for(B b : bList) {
   bRepository.delete(b);
}
bRepository.flush();
bList.clear();
aRepository.saveAndFlush(a);

还是一样...

A类看起来像这样:

@Entity
@Table(name = "A")
public class A implements Serializable {
    private static final long serialVersionUID = -1286451120913657028L;

    @Column(name = "id", length = 16, nullable = false, updatable = false)
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    @GeneratedValue(generator = "uuid")
    @Basic(fetch = FetchType.EAGER)
    @Id
    protected UUID id;

    @OneToMany(mappedBy = "a", fetch = FetchType.EAGER)
    @Cascade({ CascadeType.ALL })
    List<B> bList;

    // getter + setter
}

我究竟做错了什么?!


Class B:

@Entity
@Table(name = "B")
public class B implements Serializable {
    @Column(name = "id", length = 16, nullable = false, updatable = false)
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    @GeneratedValue(generator = "uuid")
    @Basic(fetch = FetchType.EAGER)
    @Id
    protected UUID id;

    @ManyToOne(optional = false)
    @JoinColumns({ @JoinColumn(name = "A_id", referencedColumnName = "id", nullable = false) })
    @Valid
    A a;

    // setter + getter
}

setter 和 getter 都尽可能简单:

public List<B> getBList() {
    return bList;
}

public void setBList(List<B> bList) {
    this.bList = bList;
}

更多信息:

  • 春天3.2.2
  • 休眠4.2.2
  • spring-data-commons 1.5.1
  • spring-data-jpa 1.3.2

更新A.bList属性如下:

public class A {
    @OneToMany(mappedBy = "a", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    List<B> bList;
}

The orphanRemoval = true注释属性将告诉底层 JPA 实现删除没有任何父记录的 B 记录。

另外,自从B一方管理该协会,您应该清除其a破坏关系时的属性。为了使其更易于阅读并消除调用者此类实现细节的负担,您应该在A :

public class A {
    public void clearBList() {
        for (B b : bList) {
            b.releaseA();
        }
        bList.clear();
    }
}

public class B {
    void releaseA() {
        this.a = null;
    }
}

您应该避免直接公开集合,而是返回它的不可变版本,以防止 A 类的客户端在 A 类不知情的情况下直接修改集合。A管理着B列表,所以它应该完全控制它!

public class A {
    public List<B> getBList() {
        return Collections.unmodifiableList(bList);
    }
}

希望有帮助。

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

JpaRepository删除子元素 的相关文章

随机推荐

  • 在tensorflow js中重新训练图像分类器

    你好 有什么想法可以将重新训练图像分类器转换为与tensorflow js一起使用吗 从https www tensorflow org hub tutorials image retraining https www tensorflow
  • OS X 上的 Perl Unicode 测试在 Debian 上失败

    我有以下测试 use Test More use Lingua EN NameCase nc use utf8 my output Test Builder gt new gt todo output binmode output enco
  • 在 rdlc 文件中隐藏文本框时保留空白

    我创建了一个报告 该报告的左侧有一个图像 该图像根据传入该报告的参数有条件地可见 页面右侧还有另一个文本框 我观察到 当图像的隐藏属性设置为 True 时 右侧的文本框将保留在正确的位置 当图像的 Hidden 属性设置为 IFF 1 1
  • addEventListener 到 AngularJS 中的简单指令示例

    试图得到this http codepen io softwareeveryday pen beBxmp非常基本的指令示例 从一些调查来看 elem 似乎是一个对象HTML标题元素 继承自 Element 不知道为什么elem addEve
  • 如何使用 Oauth 在 django 中更新 Twitter 的状态

    感谢omab 的social auth 项目 我添加了我的网站twitter 登录 效果很好 但我想让经过身份验证的用户在我的网站上分享推文成为可能 我怎样才能做到这个要求呢 任何帮助和想法将不胜感激 我不确定social auth but
  • 如何在 Excel 中将列转置为行

    我有以下 Excel 工作表 A 1 foo 2 bar 3 baz 4 bam 实际上 该列要长得多 使得手动转发不成为一种选择 我怎样才能把这张纸变成 A B C D 1 foo bar baz bam 我尝试过数据透视表功能 但无法获
  • 如何在 Symfony 中延长会话 cookie 的生命周期?

    在服务器端访问会话数据时 modified time被设置 因此将其过期时间延长到未来 然而 这不会发生在PHPSESSID曲奇饼 虽然服务器端的会话数据过期时间得到延长 但 cookie 过期时间却没有延长 如果 cookie 过期 用户
  • 如何在Wordpress中隐藏模板? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有没有办法在管理中隐藏模板文件 例如 我有一个模板 仅在安装了特定插件后才可用 并且我已经知道如何检查插件是否处于活动状态 但是如何隐藏模板呢 例如
  • 使用 MailKit / MimeKit 从电子邮件中删除附件

    我正在使用 MailKit 库来处理电子邮件 它运行良好 但是 我试图将电子邮件拆分为其组成文件 a 主电子邮件 无附件 b 单个附件文件 以存储在文件系统上 我可以单独保存附件 但似乎无法从电子邮件正文代码中删除它们 IE 它们与主电子邮
  • 使用 Django 通道进行会话身份验证

    尝试使用 Django 通道进行身份验证 使用一个非常简单的 websockets 应用程序 该应用程序回显用户使用前缀发送的任何内容 You said 我的流程 web gunicorn myproject wsgi log file p
  • Log4j 配置和观察无法正常工作

    我在我的应用程序中使用 log4j 进行日志记录 从现在开始 我使用以下代码来配置日志记录 LogManager resetConfiguration InputStream stream Thread currentThread getC
  • Android Studio:尝试呈现 XML 布局时出现 InvalidVirtualFileAccessException

    我正在尝试在我的应用程序中预览 xml 布局 任何 xml 布局 我正在使用 Android Studio 1 5 Preview 2 我一遍又一遍地收到此错误 InvalidVirtualFileAccessException 访问无效的
  • 使用 Excel VBA 运行 SQL 查询

    我对 SQL 和 VBA 相当陌生 我编写了一个 SQL 查询 我希望能够从 Excel 工作簿中的 VBA 子程序调用和运行该查询 然后将查询结果带入工作簿中 我在网上找到了一些潜艇 stackoverflow 和其他地方 声称可以这样做
  • 寻找家谱[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在为我的 Web 应用程序创建具有 HTML5 要求的家谱功能 我已经搜索并找到了一些 JS 示例 但没有找到符合我要求的 我已经尝试
  • 隐藏特定子页面上的 Ionic TabBar (IONIC 3)

    我想在多个特定页面上隐藏我的标签栏 我的主要重点是将其隐藏在我的登录页面 注册页面和评论页面上 我尝试过 tabsHideOnSubPages true 但是当我这样做时我的 UserProfile 页面 这是一个子页面 隐藏选项卡栏 选项
  • 如何在 SSL 下从 PDO 连接 MySQL

    我已经配置了MySQLubuntu 服务器中的 SSL show variables like ssl Variable name Value have openssl YES have ssl YES ssl ca etc mysql c
  • 配置 WEBUTIL 后 Oracle Form 冻结

    我正在使用 Oracle Forms 10g 它是基于 Web 的 Oracle 表单应用程序 我想从 Oracle Forms 10g 生成 Excel 报告 我配置了 WEBUTIL 并使用 CLIENT OLE2 包 在触发器 WHE
  • 查找矩阵中对角线的单词字母

    我有一个5 6的矩阵 所有的值都是英文字母 我必须在矩阵中从左到右 从右到左 从上到下 从上到对角线找到特定的单词 其实这是一个字谜 我能找到 左右 右左 上下 和 下上 这些词 当涉及到对角线查找单词时 事情会变得更加混乱 我提供了从左到
  • Ionic Framework 和 Firebase 3.x 版本:此域未获得对您的 Firebase 项目进行 OAuth 操作的授权

    我正在使用 Ionic Framework 和 Firebase 开发 iOS 应用程序 我已在我的项目中将 Firebase SDK 更新到版本 3 x 我想做的是在真实设备上使用 Facebook 对用户进行身份验证 当我在浏览器上测试
  • JpaRepository删除子元素

    我正在尝试执行一个非常简单的删除操作 但不知何故它不起作用 因为我将 DAO 更新到了 JpaRepository 基本上是这样的 A a aRepository findOne id a setSomeField someNewStrin