您的位置:首页 > 其它

类继承导致Hibernate多态查询问题

2014-12-10 00:00 543 查看
今天启动Tomcat,不经意间居然发现控制台报了如下Warn:

org.hibernate.engine.query.HQLQueryPlan - [http-bio-9080-exec-3] WARN  - firstResult/maxResults specified on polymorphic query; applying in memory!

In memory,非常敏感的词汇,赶紧核查代码,定位到HQLQueryPlan的如下语句:

boolean needsLimit = hasLimit && translators.length > 1;
QueryParameters queryParametersToUse;
if ( needsLimit ) {
log.warn( "firstResult/maxResults specified on polymorphic query; applying in memory!" );

debug结果translators.length>1,原来我在Hibernate中有个TenantDictParam类继承了DictParam,这个DictParam类同时又直接当一个po用,两个对象都有对应独立的hbm映射文件,在使用HQL对这个基类进行查询时,Hibernate无法反向自动匹配对象是这个DictParam还是TenantDictParam,并最终导致上面的结果。

解决办法:在hbm的<class>中添加polymorphism="explicit"禁用多态
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: