Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么在下面的示例中从集合中移除实体的操作不会被传播?

为什么在下面的示例中从集合中移除实体的操作不会被传播?
EN

Stack Overflow用户
提问于 2013-07-03 09:38:54
回答 1查看 55关注 0票数 0

这个问题可能是因为我不知道JPA能做什么和不能做什么,所以希望有人能给我一些启发。简而言之,从集合中移除实体不会传播到其祖级的内存中实例。以下是一个示例场景。

我们有三个实体(A,B,C)。

代码语言:javascript
运行
AI代码解释
复制
@Entity
public class C {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;
  ...
  @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
  @JoinColumn(name="B_ID")
  private B b;
  ...
}

和,

代码语言:javascript
运行
AI代码解释
复制
@Entity
public class B {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;
  private String name;

  @OneToMany(mappedBy = "b", fetch = FetchType.EAGER, cascade = {CascadeType.REMOVE, CascadeType.MERGE})
  private Set<C> cs;

  @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
  @JoinColumn(name = "A_ID")
  private A a;
  ...
}

和,

代码语言:javascript
运行
AI代码解释
复制
@Entity
public class A {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;

  @OneToMany(mappedBy = "tenant", fetch = FetchType.EAGER, cascade ={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
  private Set<B> bs;
  ...
}

接下来,我们有一个无状态会话bean,用于修改B的实例。

代码语言:javascript
运行
AI代码解释
复制
@Stateless
public class BServiceBean implements BService {

  @PersistenceContext(unitName = Constants.PU)
  EntityManager em;

  @Override
  public B updateB(B b) {
    return em.merge(b);
  }

  @Override
  public B removeC(int bId, int cId) throws IllegalArgumentException {
    B b = em.find(B.class, bId);

    if (null == b) {
      throw new IllegalArgumentException("No b with id: " + bId + " exists.");
    }
    C c = em.find(C.class, cId);

    if (null == c) {
      throw new IllegalArgumentException("No c with id: " + cId + " exists.");
    }
    b.getCs().remove(c);
    em.remove(c);
    return em.merge(b);
  }
}

我们通过容器注入的BService实例在servlet中修改了大量这样的实体。

代码语言:javascript
运行
AI代码解释
复制
// created and persisted an A with three Bs, one of which has three Cs. 
A a = ...;
b2.setName(changedName);
b2 = bService.updateB(b2); // this change is reflected in a
...
b2 = bService.removeC(b2.getId(), c1.getId()); // this change is not reflected in a

// but it is in the db
a = aService.findAById(a.getId); // this instance of a has a b2 without a c1

为什么从B的集合中移除实体不会在合并到A时级联,即使B中基本字段的更改在合并B时级联到A?有什么我可以做的,使JPA将实体移除层叠到A?

EN

回答 1

Stack Overflow用户

发布于 2013-07-03 09:44:04

你只需要级联,持久化和合并,你也应该需要级联删除。只需添加以下类型即可级联添加、更新和删除。

代码语言:javascript
运行
AI代码解释
复制
cascade =CascadeType.ALL
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17444561

复制
相关文章
centos设置ssh安全只允许用户从指定的IP登陆
(adsbygoogle = window.adsbygoogle || []).push({});
拓荒者
2019/03/11
1.9K0
过度设计有意义吗
看着自己每次根据设计原则及模式的代码重构,虽效果不错,但也自省:如果我的每段代码都这么写,是不是过度设计?把握设计的度,需长久锤炼。行业也总结了很多原则,帮助我们把握设计的度。它们是一种思考方法、一种行为准则。
JavaEdge
2023/01/15
4740
Java的checked exception有意义吗?
这种异常必须在编译前就try/catch,又不一定会抛异常,小项目中不明显,大项目中,会造成不必要代码臃肿和可读性降低,完全可在编译出错时,通过单元测试和调试,得到正确代码。这设计还有啥意义?
JavaEdge
2023/09/19
1760
2021年学习Java还有意义吗?
Java编程语言今年已经26岁了,按照软件开发标准来说,这是非常古老的语言了。所以很多编程初学者想知道Java在2021年是否仍然有意义?是否值得学习?
全栈程序员站长
2022/09/08
2460
2021年学习Java还有意义吗?
ssh无密码登陆和只允许指定账号登陆
需求:A主机可以无密码登陆B主机,并且只能在A主机使用root登陆B主机 步骤: 1、生成公钥ssh-keygen -t rsa -P ”;-P表示密码,-P ” 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车(如果提示:passphrase too short那么就直接输入ssh-keygen -t rsa 按下三次enter就好了) 2、拷贝A机器公钥到B机器当中 scp .ssh/id_rsa.pub root@B机器IP:/root/ 3、将A公钥加入到B机器中,登陆B机器执行
苦咖啡
2018/04/28
2.6K0
程序员的努力有意义吗?
IT技术更新换代很快,如果我们花费很多年去学习技术,有一天旧技术被淘汰,新技术成为主流,那我们是不是就白学了?我们程序员的努力还有什么意义呢?
小灰
2023/09/02
1520
程序员的努力有意义吗?
10年后编程还有意义吗?
这个是Quora上提出的一个问题。随着AI在近年来成为热门话题,并且在AlphaGo自学围棋击败了人类近10年最好的围棋选手之后,有人开始提出这个问题。具体来说这个问题有三层意思: 到2025年程序员还有没有用,到那个时候所谓的“程序员”是指什么? 代码本身还有没有用,到那时候代码会变成什么样子? 机器智能会不会取代(目前意义的)代码或程序员两者的其中一个或者全部? 大家基本上倾向于认为,到2025年时编程仍然有意义,但有人说2025年以后情况可能就不是这样了。 而那些认为编码将死、程序员将失业的人的理
用户1667431
2018/04/18
6430
10年后编程还有意义吗?
10年后编程还有意义吗?
这个是 Quora 上提出的一个问题。随着 AI 在近年来成为热门话题,并且在 AlphaGo 自学围棋击败了人类近 10 年最好的围棋选手之后,有人开始提出这个问题。具体来说这个问题有三层意思:
哲洛不闹
2018/09/18
4200
10年后编程还有意义吗?
10年后编程还有意义吗?
这个是 Quora 上提出的一个问题。随着 AI 在近年来成为热门话题,并且在 AlphaGo 自学围棋击败了人类近 10 年最好的围棋选手之后,有人开始提出这个问题。具体来说这个问题有三层意思:
哲洛不闹
2018/09/18
3850
10年后编程还有意义吗?
Sftp只允许用户访问指定的目录,不能访问其他目录
在一些生产环境中,有时,用户需要传数据到服务器,但是配置ftp服务比较麻烦,此时,我们可以为用户创建sftp账户,让用户使用sftp来上传下载所需的数据。Sftp账号即为系统账号,将账户密码给用户,用户除了能登录sftp上传下载数据外,还可以访问系统中的其他目录,由此,给我们的系统带来了安全隐患,再次,我们需要配置用户只能通过sftp登录系统下载上传所需的数据。
joshua317
2021/01/13
11.3K2
有了InnoDB,Memory存储引擎还有意义吗?
两个group by 语句都用了order by null,为什么使用内存临时表得到的语句结果里,0这个值在最后一行;而使用磁盘临时表得到的结果里,0这个值在第一行?
JavaEdge
2021/12/07
9290
有了InnoDB,Memory存储引擎还有意义吗?
CentOS Stream 9 SSH不能使用root用户登录
AiDBA宝典
2023/08/10
1.7K0
CentOS Stream 9 SSH不能使用root用户登录
Windows可以ssh远程吗?
Windows可以ssh远程吗?Windows是用mstsc等rdp远程的。Linux可以rdp远程吗?Linux是用ssh远程的。
Windows技术交流
2021/09/29
5.7K0
有了InnoDB,Memory存储引擎还有意义吗?
两个group by 语句都用了order by null,为什么使用内存临时表得到的语句结果里,0这个值在最后一行;而使用磁盘临时表得到的结果里,0这个值在第一行?
JavaEdge
2021/10/18
1.1K0
无人驾驶汽车真的有意义吗? | 拔刺
所谓无人驾驶技术,一般是指下一代智能汽车所配备的技术。而如今这一项技术,可能会改变整个现有世界的与汽车相关的商业结构。
镁客网
2018/08/16
3630
无人驾驶汽车真的有意义吗? | 拔刺
sftp端口改了ssh受影响吗_由于系统错误true端口上用户
能够完成sftp服务的部署,且实现ssh和sftp的端口分离,不使用默认的端口,sftp用户的权限只可以访问该用户的家目录里的文件和其下的子目录,实现权限控制。
全栈程序员站长
2022/10/05
1.1K0
2.OpenLDAP集成SSH登录并使用SSSD同步用户
前面Fayson文章讲《1.如何在CentOS6.5安装OpenLDAP并配置客户端》,安装及配置好OpenLDAP后,如何使用OpenLDAP上的用户登录集群服务器,本篇文章主要介绍OpenLDAP如何与SSH集成并配置SSSD同步用户。
Fayson
2018/03/29
5.3K0
2.OpenLDAP集成SSH登录并使用SSSD同步用户
机器学习与统计学的争论,有意义吗?
有的学者认为机器学习只是统计学披了一层光鲜的外衣。而另一些讨论则认为涉及使用逻辑回归或者广义线性模型(GLM)的可以称作机器学习;否则就不是。还有一些观点认为:是否执行元分析或许是区分两个领域的一个标准。
AI科技评论
2020/02/21
7000
机器学习与统计学的争论,有意义吗?
使用SSH
例如,使用SFTP将会话用于SFTP操作。此方法通过引用返回可用于SFTP操作的%Net.SSH.SFTP实例。
用户7741497
2022/07/04
2770
讨论帖:如果只有两个数据中心,使用 Raft 协议还有意义吗?
对 Raft 有所了解的同学都知道,Raft 一般会使用奇数个节点,比如 3、5、7 等等。这是因为 Raft 是 一种基于多节点投票选举机制的共识算法,通俗地说,只有超过半数节点在线才能提供服务。这里超过半数的意思是 N/2+1(而不是N/2)。举例来说,3 节点集群需要 2 个以上节点在线,5 节点集群需要 3 个以上节点在线,等等。对于偶数节点的集群,2 节点集群需要 2 节点同时在线,4 节点集群需要 3 节点在线,以此类推。实际上不只是 Raft,所有基于 Quorum 的共识算法大体上都是这么个情况,例如 Paxos,ZooKeeper 什么的,本文仅以 Raft 为例讨论。
PingCAP
2020/02/04
2.7K0
讨论帖:如果只有两个数据中心,使用 Raft 协议还有意义吗?

相似问题

不能将SSH作为根用户使用键

10

禁用非根用户的SSH

40

通过ssh用户执行根命令

30

使用salt为非根用户生成ssh键

10

OpenLDAP实现只允许根用户设置帐户密码。

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档