今天启动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框架时遇到的一个关于多态查询的警告,解释了出现此警告的原因及解决方法。通过调整hbm配置文件中的<class>元素属性为polymorphism=explicit,可以有效避免内存中应用多态查询带来的问题。

256

被折叠的 条评论
为什么被折叠?



