有一个带有@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;
....
}
但是我稍后在代码中发现,如果我刚刚从数据库中检索类的实例,然后在会话中只修改了 Song 实体中的一个字段,这将导致它更新所有链接到该歌曲的封面艺术实体尽管封面艺术没有任何变化,但为什么要这样做?
此外,我认为这不会导致问题,但我正在使用 Envers,并且(看似)对 CoverArt 表不必要的额外更新具有导致 Envers 创建不必要的审计表的敲击效应。
如果我删除修改一个字段的 CascadeType 注释不会导致更新封面艺术实体并且一切正常,只要我添加额外的逻辑来添加封面艺术,但我希望我不需要做这个。