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

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

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



转载于:https://my.oschina.net/u/699015/blog/354647

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值