2

エンティティを削除するという問題がありますが、それを変更するとデータベースが変更されます。これは私の DAO のメソッドの一部です。

@Entity
public class Profile {
    @Id
    @GeneratedValue
    private Long id;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "PROFILE_ID")
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<Avatar> avatars;

    ...
  }

DAO メソッドの場合:

Profile profile = getProfile(...);

// Clear from hibernate
currentSession.evict(profile);
profile.setId(null);

for (Avatar a : profile.getAvatars()) {
    currentSession.evict(a);
    a.setId(null);
}

currentSession.save(profile); // save a copy of Profile (not update)

前:

PUBLIC.PROFILE
  ID, DOMAIN, STATUS
  1, "test", "MEMBER"

PUBLIC.AVATAR
  ID, NAME, PROFILE_ID
  1, "main", 1

メソッドの後

PUBLIC.PROFILE
  ID, DOMAIN, STATUS
  1, "test", "MEMBER"
  2, "test", "MEMBER"

PUBLIC.AVATAR
  ID, NAME, PROFILE_ID
  1, "main", null
  2, "main", 2

ご覧のとおり、AVATAR の元の行には null の外部キーが含まれています。

なんで?これは、Unitils と Spring を使用したユニット/統合テストで発生しており Hibernate DAO の動作に影響を与える可能性があります。

それはすべてインメモリ H2 データベースにあります..


行を追加した後

profile.setAvatars(new ArrayList<>(profile.getAvatars());

できます ...

だから、問題は Hibernate の の実装だったと思いますがList、それが動作にどのように影響するのでしょうか??

4

1 に答える 1