Hibernate Polymorphic HQL SELECT语句

std*_*all 6 java polymorphism hibernate hql

我正在使用Hibernate注释来持久化我的课程.目前我正在使用以下策略来映射类

我有一个抽象类,它是Parent类,我有两个继承它的子类,Mother,Father.

我这样映射:

@MappedSuperclass
public abstract class Parent {

private int age;
private String name;
...
}
Run Code Online (Sandbox Code Playgroud)

另外两个类声明如下:

@Entity
public Class Father extends Parent {

private boolean haveMustash;
...
}
Run Code Online (Sandbox Code Playgroud)

所以基本上情况是"每班表".

现在我想创建一个Hibernate HQL语句,它将更新父级的年龄,无论它是什么类型(母亲,父亲).将使用name列查找父级,该列在两个表中都是唯一的.但我不知道只是看着这个名字,如果它是母亲或父亲.如何创建将在两个表中查找的HQL语句,并返回正确的实体进行更新?

我想到了这样的事情:(但我甚至不知道是否可能)

Parent parent = hibernateTemplate.find("from Mother,Father where name="
        + name);
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 2

from Parent p where p.name = :name
Run Code Online (Sandbox Code Playgroud)

(未测试)。

请注意,如果它有效,它将导致两个查询,因为这两个实体没有任何共同点,除了它们从超类继承一些映射属性之外。这里没有实体继承,也没有实现每类表策略。@Entity如果 Parent 用而不是进行注释@MappedSuperClass,并且您使用 定义了继承策略,则您会这样做@Inheritance