gpt4 book ai didi

java - 使用 JPA 从子对象级联到父对象

转载 作者:行者123 更新时间:2023-12-01 10:49:58 24 4
gpt4 key购买 nike

我有以下场景。

我们的域中有两个对象,它们形成父子关系。

Person 是父级,Role 是子级。这两个对象源自同一个祖先。

子级不是将关系建模为双向,而是仅包含表示为 long 的父级的对象 ID。

父级有一个到子级的 @oneToMany 映射。

我们遇到的问题如下:域层当前单独创建并保留子级,然后简单地将父级的 id 更新到自身。

然而,这种方法的问题是,已经加载到持久上下文中的人员不会被这个新角色刷新。当我们尝试在单个事务中安排多个操作时,这种方法会对我们的应用程序造成严重破坏。我们也无法利用二级缓存。我们正在寻求创建双向关系,但是我不清楚处理子对象的最佳方法是什么。

我看到的所有建议都表明应该保存父对象,然后将其级联到子对象。还建议所有级联类型都应遵循此方法。因此,对子级的更改是通过父级持久保存的。

但是,我并不质疑这种方法,因为已经有一个实现,从子级到父级的级联是否可行?我想这应该适用于合并和刷新?这似乎是一种将持久上下文与对象更改同步的可行方法,除了添加 @ManyToOne 注释之外,无需更改底层实现。

欢迎任何评论或建议。

最佳答案

不,从子级到父级的级联根本不是一个好主意。

我建议您采用另一种方法,建立从子级到父级的关联,起诉 @ManyToOne 关联。 @ManyToOne 关系是最自然的关联,因为它遵循 RDBMS 所采用的 FK 方法。

由于您已经使用了 @OneToMany 关联,因此您只需将其转换为 mappedBy 关联,并添加从父级到子级的级联。这种方法可以让你在孤立的情况下拯救 child 。您唯一需要注意的是,如果 EntityManager 已加载父级和子级,则同步双方。但如果只加载 Child 而不获取 Parent,则可以简单地单独操作 Child(例如将 Parent 设置为 null)。

关于java - 使用 JPA 从子对象级联到父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33970435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com