如何在hibernate中覆盖子类中的集合元素类型?

时间:2011-03-18 09:09:29

标签: java 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")

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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

在数据库中,你有一个鉴别器,无论如何都要定义数据集的实体类。因此,如果您将具有鉴别器“CAT”(或类似)的数据集指定为“TIGER”的子项,则在加载关联时会收到异常(因为该实体将属于Cat类并且可以'被投射到Tiger)。