@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エンティティの1つのフィールドだけを変更すると、その曲にリンクされているすべてのカバーアートエンティティが更新されることがわかりました。カバーアートは何も変わっていませんが、なぜこれをしているのですか?
また、それが問題を引き起こすとは思わないが、私はEnversを使用しており、CoverArtテーブルへの(一見)不必要な追加の更新は、Enversに不要な監査テーブルを作成させるというノック効果もあります。
1つのフィールドを変更するCascadeTypeアノテーションを削除しても、カバーアートエンティティは更新されず、カバーアートを追加するときに追加のロジックを追加する限り、すべてが正常に機能しますが、必要がないことを望んでいました。これ。