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 楼答案
我们通过提供一个XML文件(根元素:…)来实现,但你为什么一开始就需要它呢
通常,您会限制Tiger类只接受同一类的子类,因此
getChildren()
将返回一组Tiger在数据库中,您将有一个鉴别器来定义数据集的实体类。因此,如果将鉴别器“CAT”(或类似)指定为“TIGER”的子数据集,则无论如何在加载关联时都会出现异常(因为实体将属于
Cat
类,不能强制转换为Tiger
)