JPA / hibernate继承和将抽象超类/实体子类化的实体的运行时类型

时间:2012-09-22 16:15:25

标签: hibernate inheritance jpa entity runtime-type

我需要对JPA / Hibernate继承做一些澄清。

假设我有一个由两个FruitApple实体子类化的抽象Orange实体。此外,我在数据库中有一个Orange的实例。

我可以将此实例从数据库中检索为普通Fruit并将其转换为Orange吗?

2 个答案:

答案 0 :(得分:1)

你可以做到:

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'

答案 1 :(得分:0)

从Fruit f中选择f,其中treat(f为橙色).somePropetyInOrange =:value