java – 合并JPA实体返回旧值
发布时间:2020-12-15 02:28:14 所属栏目:Java 来源:网络整理
导读:我有两个JPA实体,它们之间有双向关系. @Entitypublic class A { @ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE}) B b; // ...} 和 @Entitypublic class B { @OneToMany(mappedBy="b",cascade={CascadeType.PERSIST,CascadeType.MERGE}) SetA a
我有两个JPA实体,它们之间有双向关系.
@Entity public class A { @ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE}) B b; // ... } 和 @Entity public class B { @OneToMany(mappedBy="b",cascade={CascadeType.PERSIST,CascadeType.MERGE}) Set<A> as = new HashSet<A>(); // ... } 现在我更新一个分离的A的一些字段值,它们也与某些B有关系,反之亦然,然后将它合并 public String save(A a) { A returnedA = em.merge(a); } 在更新它们之前,returnedA现在具有值A. FINEST: Merge clone with references A@a7caa3be FINEST: Register the existing object B@cacf2dfb FINEST: Register the existing object A@a7caa3be FINEST: Register the existing object A@3f2584b8 表示B中引用的As(仍有旧值)负责覆盖新的? 有没有人提示如何防止这种情况发生? 任何想法都非常感谢! 提前致谢. 解决方法
Dirk,我遇到了类似的问题,解决方案(我可能没有正确地利用API)是密集的. Eclipselink维护对象的缓存,如果它们没有更新(合并/持久),数据库通常会反映更改,但级联对象不会更新(特别是父级).
(我已宣布A为加入多个B的记录) public class A { @OneToMany(cascade = CascadeType.ALL) Collection b; } public class B { @ManyToOne(cascade = {CascadeType.MERGE,CascadeType.REFRESH}) //I don't want to cascade a persist operation as that might make another A object) A a; } 在上面的情况下,解决方法是: public void saveB(B b) //"Child relationship" { A a = b.getA();//do null checks as needed and get a reference to the parent a.getBs().add(b); //I've had the collection be null //Persistence here entityInstance.merge(a); // or persist this will cascade and use b } public void saveA(A a) { //Persistence entityInstance.merge(a) // or persist } 你在这里做的是从顶部向下连接链条.维护很烦人,但确实解决了这个问题.或者你可以通过检查它是否分离和刷新/更换来处理它,但我发现它不那么令人满意和刺激性. 如果有人对正确的设置有更好的答案,我会很高兴听到它.现在我已经为我的关系实体采用了这种方法,这对于维护来说肯定很烦人. 祝你好运,我很想听到更好的解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- spring mvc 中获取HttpServletRequest ,HttpServletRespon
- java – 在Spring框架中使用registerShutdownHook()
- java – 我应该在重用方法之外或之内声明变量吗?
- js实现旋转的图片
- Character.UnicodeBlock中cjk的说明详解
- java – Android SimpleDateFormat不工作
- BufferedInputStream 介绍
- java开发_生成/解析自己的QRCode二维码
- java – 使用for循环来移动一个字符数组
- 如何通过bufferedInputStream和bufferedOutputStream复制JA