我有一个名为Customer
的接口,这两个类CustomerImpl
和OwnerCustomerImpl
都实现了这个接口,然后我有一个像"select customer from Customer customer where customer.username=:username"
这样的HQL,所以这是什么结果HQL?
我总是得到CustomerImpl
的对象,但我真的想得到OwnerCustomerImpl
。
我也读过像:
这样的文档14.8。多态查询
如下的查询:
来自Cat as cat
不仅返回Cat的实例,还返回像DomesticCat这样的子类。 Hibernate查询可以命名from子句中的任何Java类或接口。该查询将返回扩展该类或实现该接口的所有持久化类的实例。以下查询将返回所有持久对象:
来自java.lang.Object o
Named接口可能由各种持久化类实现:
来自Named n,命名为m,其中n.name = m.name
最后两个查询将需要多个SQL SELECT。这意味着order by子句没有正确排序整个结果集。这也意味着您无法使用Query.scroll()调用这些查询。
我认为,结果应该包括这两个类,所以有人可以帮忙解释一下吗?
答案 0 :(得分:0)
是的,根据Hibernate,应该返回CustomerImpl
和OwnerCustomerImpl
个实例。检查是否有两个类的持久化实例。
同时检查你是否真的实现了相同的Customer
接口(而不是另一个接口的接口)。
同时检查结果是否不是完整列表(例如只是前X个元素),因为如果结果是有限的,那么Hibernate可能会选择首先返回符合您标准的CustomerImpl
个实例并包括之后OwnerCustomerImpl
。
此外,您可能只是没有任何符合查询条件的OwnerCustomerImpl
个持久化实例。