java - Hibernate 多态 HQL SELECT 语句

标签 java hibernate polymorphism hql

我正在使用 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/

相关文章:

java - (JAVA) SOAP WebService 错误对象引用未设置到对象的实例

java - Mysql 连接器在 com.mysql.jdbc.util.ReadAheadInputStream.fill() 中花费了 50% 的时间

C++ 模板协变

java - 多态性没有按预期工作,为什么?

java - 在 javascript 中实例化一个对象

java - 如何使用 hibernate 保存新创建的父实体和子实体?

java - 当查询参数是实体时,Spring Data 查询不起作用

c++ - 使用指针数组时如何确定指向哪个派生类

java - 1970 日期选择器日期

java - 如何在应用程序启动时从 java 代码更改 Hibernate connection.url 属性