我有两个类,Person 和 Company,它们派生自另一个类 Contact。它们在两个表(个人和公司)中以多态形式表示。简化的类如下所示:
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;
}
}
问题是我需要进行查询以查找包含特定字符串的 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();
如果它是每个具体子类的表,那么您最好编写两个查询(因为这就是 Hibernate 无论如何都会做的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)