2

次のエンティティがあります。

@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 に変更すると、正常に動作します。子固有のクラスではなく、親の抽象クラスを永続化しようとしている理由について何か考えはありますか?

4

1 に答える 1

2

Hibernateでは、クラスごとのテーブル階層へのポリモーフィックな関連付けが双方向である必要があります(2.2.4.1。クラスごとのテーブル)。

public class Owner {
    @OneToMany(mappedBy = "owner")
    private Set<Parent> parents;
    ...
}

public clas Parent {
    ...
    @ManyToOne
    @JoinColumn(name = "OWNER_ID")
    private Owner owner;
    ...
}
于 2012-04-09T12:22:31.643 に答える