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

今天启动Tomcat,不经意间竟然发现控制台报了以下Warn: java

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

In memory,很是敏感的词汇,赶忙核查代码,定位到HQLQueryPlan的以下语句: shell

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,并最终致使上面的结果。 app

解决办法:在hbm的<class>中添加polymorphism="explicit"禁用多态 spa

相关文章
相关标签/搜索