我正在使用 Hibernate 注释来持久化我的类。 目前我正在使用以下策略来映射类
我有一个抽象类,它是父类,我有两个继承自它的子类 爸爸妈妈。
我是这样映射的:
@MappedSuperclass
public abstract class Parent {
private int age;
private String name;
...
}
另外两个类是这样声明的:
@Entity
public Class Father extends Parent {
private boolean haveMustash;
...
}
所以基本上场景是“每个类一个表”。
现在我想创建一个 Hibernate HQL 语句来更新 parent 的年龄,无论其类型如何(母亲、父亲)。将使用名称列查找父项,该列在两个表中都是唯一的。但我不知道光看名字是妈妈还是爸爸。 我如何创建一个 HQL 语句来查看这两个表,并返回要更新的正确实体?
我想过这样的事情:(但我什至不知道它是否可能)
Parent parent = hibernateTemplate.find("from Mother,Father where name="
+ name);
最佳答案
from Parent p where p.name = :name
(未测试)。
请注意,如果它有效,它将导致两个查询,因为两个实体没有任何共同点,除了它们从父类(super class)继承了一些映射属性。您在这里没有实体继承,也没有实现每个类策略的表。如果 Parent 被注释为 @Entity
而不是 @MappedSuperClass
,并且如果您使用 @Inheritance
定义继承策略,您会这样做。
关于java - Hibernate 多态 HQL SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8323002/