2011-03-18 93 views
0

例如,老虎是猫,但老虎不会有任何猫子:如何覆盖hibernate中子类中的集合元素类型?

@Entity 
class Cat { 
    @OneToMany(targetEntity=Cat.class) 
    Set<Cat> getChildren() { ... } 
} 

和老虎:

@Entity 
class Tiger extends Cat { 
    @OneToMany(targetEntity=Tiger.class) 
    Set<Cat> getChildren() { ... } 
} 

的问题是,Hibernate不会允许这样的定义,因为错误:

Repeated column in mapping for entity: com.bee32.plover.orm.Tiger column: parent (should be mapped with insert="false" update="false") 

有什么想法吗?

+0

您需要决定它在数据库中的外观。 – axtavt 2011-03-18 09:16:54

回答

2

我们通过提供一个XML文件(根元素:...)来实现它,但为什么您首先需要它?

通常情况下,您会限制老虎班只接受同一班级的孩子,所以getChildren()会返回一组老虎。

在数据库中,您将有一个鉴别器来定义数据集的实体类。因此,如果您为具有鉴别符“CAT”(或类似)的数据集指定为“TIGER”的子项,那么无论如何加载该关联时都会发生异常(因为该实体的类别为Cat且无法转换为Tiger)。