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进行查询,因为它不是任何一个表的一部分.有关如何进行此查询的任何想法?
因为您在 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 无论如何都会做的)。
| 归档时间: |
|
| 查看次数: |
5183 次 |
| 最近记录: |