今天啓動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