類繼承致使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

相關文章
相關標籤/搜索