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

今天启动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"禁用多态



你可能感兴趣的:(类继承导致Hibernate多态查询问题)