Hibernate多态查询

Ric*_*mon 6 java polymorphism hibernate hql

我有两个类,Person和Company,来自另一个类Contact.它们在两个表(Person和Company)中以多态形式表示.简化的类看起来像这样:

public abstract class Contact {

  Integer id;

  public abstract String getDisplayName();

}

public class Person extends Contact {

  String firstName;
  String lastName;

  public String getDisplayName() {
    return firstName + " " + lastName;
  }

}

public class Company extends Contact {

  String name;

  public String getDisplayName() {
    return name;
  }

}
Run Code Online (Sandbox Code Playgroud)

问题是我需要查询查找包含某个字符串的displayName的所有联系人.我不能使用displayName进行查询,因为它不是任何一个表的一部分.有关如何进行此查询的任何想法?

Maa*_*els 4

因为您在 Java 类中进行串联,所以 Hibernate 无法真正帮助您完成此操作,抱歉。它根本看不到您在此方法中所做的事情,因为它实际上与持久性根本无关。

解决方案取决于您如何映射这些类的继承:

如果是 table-per-hierarchy 可以使用这种方法:为条件查询编写 SQL where 子句,然后使用 case 语句:

s.createCriteria(Contact.class)
 .add(Restrictions.sqlRestriction("? = case when type='Person' then firstName || ' '|| lastName else name end"))
 .list();
Run Code Online (Sandbox Code Playgroud)

如果它是每个具体子类的表,那么您最好编写两个查询(因为这就是 Hibernate 无论如何都会做的)。