我有两个POJO类Quote和RQuote,其中RQuote被定义为Quote的子级。在两个相应的hbm.xml文件中,两个类之间没有定义关系。
问题是,我有一个hql作为"从引用q"中选择sum(q.packagePrice)。这个hql将查询Quote和RQuote对象,因此它返回两个和值。
我希望sum函数仅在Quote对象上运行,而不是在其子RQuote上运行。无论如何在Hibernate中这样做?谢谢你的帮助。
引用
public class Quote extends Base implements Auditable {
protected Client user;
protected Package subscriptionPackage;
// Default noarg constructor
public Quote() {}
// Accessors
public Client getUser() {
return user;
}
public void setUser(Client user) {
this.user = user;
}
public Package getSubscriptionPackage() {
return subscriptionPackage;
}
public void setSubscriptionPackage(Package subscriptionPackage) {
this.subscriptionPackage = subscriptionPackage;
}
public String getType() {
return "Quote";
}
}
public class RQuote extends Quote {
// Default noarg constructor
public RQuote() {}
public String getType() {
return "RQuote";
}
}
答案 0 :(得分:0)
这是你的错误:
RQuote extends Quote
您将RQuote定义为Quote的子类。因此,RQuote 的每个实例也是的一个实例。
现在,当Hibernate正在评估select sum(q.packagePrice) from Quote q
时,它首先会在其缓存中查找已加载的所有Quote实例,并在那里找到RQuote的实例,它们也是Quote的实例,并使用它们。因此,之前由同一会话中的任何其他查询加载的所有RQuote都将包含在您的总和中。
此外,Query.list()或Query.uniqueResult将无法按预期工作。
所以你必须纠正你的Java类RQuote并且不要让它扩展Quote。