Имейте класс сущности (Song) с сопоставлением @OneToMany с другой сущностью (CoverArt) и каскадом, установленным на 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, изменение одного поля не приводит к обновлению объектов обложки, и все работает нормально, пока я добавляю дополнительную логику для добавления обложки, но я надеялся, что не сделал нужно сделать это.