java Hibernate多态HQL SELECT语句
我正在使用Hibernate注释来持久化我的类。 目前,我正在使用以下策略来映射这些类
我有一个抽象类,它是父类,我有两个子类继承自它 妈妈,爸爸
我是这样绘制的:
@MappedSuperclass
public abstract class Parent {
private int age;
private String name;
...
}
另外两个类的声明如下:
@Entity
public Class Father extends Parent {
private boolean haveMustash;
...
}
所以基本上情况是“每类表”
现在,我想创建一个Hibernate HQL语句,该语句将更新父母的年龄,而不管其种类(母亲、父亲)。父项将使用name列进行查找,这在两个表中都是唯一的。但我不知道只要看看名字是母亲还是父亲。 如何创建一个HQL语句,它将在两个表中查找,并返回要更新的正确实体
我想过这样的事情:(但我不知道这是否可能)
Parent parent = hibernateTemplate.find("from Mother,Father where name="
+ name);
# 1 楼答案
詹妮特的回答是正确的。使用
@Entity
来映射父级,而不是@MappedSuperclass
。这允许您在父对象上运行Hibernate查询和更新(后者只允许您在父对象和母对象上运行)。您可以使用@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
注释保留每个类的表from Mother,Father
不起作用,因为这会隐式地连接表。你想要的是一个联盟。使用@Entity
,Hibernate会自动为您完成这项工作