2012-04-09 109 views
2

我有以下实体:JPA 2个Inheritance.TABLE_PER_CLASS与抽象的关系

@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{ 
    ... 
} 

}

的问题是,我得到下面的异常,当我试图坚持一个业主与父元素:

org.springframework.dao.InvalidDataAccessResourceUsageException:无法插入集合:[sample.Owner.parents#1]; SQL [更新父集OWNER_ID =? PARENT_ID =?]; org.springframework.dao.InvalidDataAccessResourceUsageException:无法插入集合:[sample.Owner.parents#1]; SQL [更新父集OWNER_ID =? PARENT_ID =?];嵌套异常是org.hibernate.exception.SQLGrammarException:无法插入集合: [sample.Owner.parents#1]嵌套异常是org.hibernate.exception.SQLGrammarException:无法插入集合:[sample.Owner.parents#1 ]

如果我将InheritanceType更改为JOINED,它工作正常。任何想法为什么它试图坚持父抽象类而不是孩子特定的?

回答

2

Hibernate对多态关联表每类层次结构是双向的(2.2.4.1. Table per class):

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

public clas Parent { 
    ... 
    @ManyToOne 
    @JoinColumn(name = "OWNER_ID") 
    private Owner owner; 
    ... 
} 
+0

非常感谢你,你真的拿到了尚方宝剑。 – domgom 2012-04-09 13:38:16