次のエンティティがあります。
@Entity
public class Owner{
@Id
@Column(name = "OWNER_ID")
@OneToMany()
@JoinColumn(name = "OWNER_ID")
private Set<Parent> parents;
...
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Parent{
@Id
@Column(name = "PARENT_ID")
...
}
@Entity
public class ChildA extends Parent{
...
}
@Entity
public class ChildB extends Parent{
...
}
}
問題は、親要素を持つ Owner を永続化しようとすると、次の例外が発生することです。
org.springframework.dao.InvalidDataAccessResourceUsageException: コレクションを挿入できませんでした: [sample.Owner.parents#1]; SQL [update Parent set OWNER_ID=? PARENT_ID=?]; org.springframework.dao.InvalidDataAccessResourceUsageException: コレクションを挿入できませんでした: [sample.Owner.parents#1]; SQL [update Parent set OWNER_ID=? PARENT_ID=?]; ネストされた例外は org.hibernate.exception.SQLGrammarException: コレクションを挿入できませんでした: [sample.Owner.parents#1] ネストされた例外は org.hibernate.exception.SQLGrammarException: コレクションを挿入できませんでした: [sample.Owner.parents#1]
InheritanceType を JOINED に変更すると、正常に動作します。子固有のクラスではなく、親の抽象クラスを永続化しようとしている理由について何か考えはありますか?