有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    詹妮特的回答是正确的。使用@Entity来映射父级,而不是@MappedSuperclass。这允许您在父对象上运行Hibernate查询和更新(后者只允许您在父对象和母对象上运行)。您可以使用@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)注释保留每个类的表

    from Mother,Father不起作用,因为这会隐式地连接表。你想要的是一个联盟。使用@Entity,Hibernate会自动为您完成这项工作