【发布时间】:2012-09-14 18:13:47
【问题描述】:
我需要一些关于 JPA/Hibernate 继承的说明。
假设我有一个抽象的Fruit 实体,它由两个Apple 和Orange 实体子类化。此外,我在数据库中有一个Orange 的实例。
我可以从数据库中检索此实例作为纯 Fruit 并将其转换为 Orange 吗?
【问题讨论】:
标签: hibernate inheritance jpa entity runtime-type
我需要一些关于 JPA/Hibernate 继承的说明。
假设我有一个抽象的Fruit 实体,它由两个Apple 和Orange 实体子类化。此外,我在数据库中有一个Orange 的实例。
我可以从数据库中检索此实例作为纯 Fruit 并将其转换为 Orange 吗?
【问题讨论】:
标签: hibernate inheritance jpa entity runtime-type
你可以这样做:
Fruit fruit = dao.get(id, Fruit.class)
if(fruit instanceof Orange)
{
(Orange) fruit
}
并且在运行时将是适当的类型。但是如果你写一个HQL,你可以检查它的运行时类型。如果您很好地完成了继承和映射,这通常是不需要的。
select f from Fruit f where f.class = 'a.b.c.Fruit'
【讨论】:
select f from Fruit f where Treat(f as Orange).somePropetyInOrange=:value
【讨论】: