gpt4 book ai didi

hibernate - 在 Hibernate 中使用 CascadeType.ALL 保存顶级实体会导致对相关实体进行不必要的更新

转载 作者:行者123 更新时间:2023-12-02 02:18:06 26 4
gpt4 key购买 nike

有一个带有@OneToMany 映射到另一个实体(CoverArt) 的实体类(Song),并将级联设置为ALL,因为只需要保存主要实体并让它负责保留封面艺术似乎更容易

@Audited
@Entity
public class Song
{
@Id
@GeneratedValue
private Integer recNo;

@Version
private int version;

@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
private List<CoverArt> coverArts;

....

}

但是我稍后在代码中发现,如果我只是从数据库中检索类的实例,然后在 session 中修改 Song 实体中的一个字段,这将导致它更新链接到的所有封面艺术实体那首歌即使封面艺术没有任何改变,为什么要这样做?

另外,我不认为它会导致问题,但我正在使用 Envers 并且(看似)对 CoverArt 表的额外更新具有导致 Envers 创建不必要的审计表的敲击效应。

如果我删除 CascadeType 注释修改一个字段不会导致封面图实体更新并且一切正常只要我添加额外的逻辑用于我添加封面图但我希望我没有需要这样做。

最佳答案

我似乎已经解决了我正在使用创建新 session 然后在我从数据库中检索到任何内容时关闭它的反模式而不是将方法传递给现有 session 并且只在我完成后关闭 session 的问题完成对象,解决这个问题就解决了。

关于hibernate - 在 Hibernate 中使用 CascadeType.ALL 保存顶级实体会导致对相关实体进行不必要的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9490967/

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