[hibernate-dev] Some insight about HHH-12101 / remove HQL-style positional parameters

Laurent Almeras lalmeras at gmail.com
Fri Feb 2 16:36:41 EST 2018


Hi,

After digging further, it seems to me that there is a bug with Hibernate 
5.3.

I debug and step through the query handling, and the generated QueryDSL 
query seems correct to me:

=========================
select queuedTaskHolder
from QueuedTaskHolder queuedTaskHolder
where queuedTaskHolder.status in (?1) and queuedTaskHolder.queueId = ?2
order by queuedTaskHolder.id asc
=========================

The (:x1_0, :x1_1, :x1_2, :x1_3) part appears in the hibernate query 
handling inside layers, in 
org.hibernate.query.internal.QueryParameterBindingsImpl.expandListValuedParameters(String, 
SharedSessionContractImplementor) method. It seems that the purpose of 
this method is to transform query and parameters arguments when argument 
is a list. So query is rewritten with named parameters, and query 
parameters are modified to inject this new parameters.

And this query is then rejected in 
org.hibernate.hql.internal.ast.HqlSqlWalker.generatePositionalParameter(AST, 
AST) because there are namedParameters.

If I switch dependency to 5.2.12.Final release, the same code works.

I'll try to write a minimal test-case about this when I'll get some 
spare time.

-- 
Laurent Almeras

On 02/02/2018 06:00 PM, Laurent Almeras wrote:
> Hi,
> 
> Testing Hibernate 9.3.0.Beta2, I run into this issue:
> 
> 
> ===============
>   Cannot define positional and named parameterSpecs : select 
> queuedTaskHolder
> from org.iglooproject.jpa.more.business.task.model.QueuedTaskHolder 
> queuedTaskHolder
> where queuedTaskHolder.status in (:x1_0, :x1_1, :x1_2, :x1_3) and 
> queuedTaskHolder.queueId = ?2
> ===============
> 
> 
> Hibernate complains that query contains both named and positional 
> parameters (note that this query use to work on Hibernate 5.2.x).
> 
> This new behavior is linked to:
> 
> * this commit: 
> https://github.com/hibernate/hibernate-orm/commit/5e0274adbbd3e0aa3092c29a765fd203c8279126 
> 
> * this issue: https://hibernate.atlassian.net/browse/HHH-12116
> * and this parent issue: https://hibernate.atlassian.net/browse/HHH-12101
> 
> I also find that you already talk about this behavior on this same 
> mailing-list: 
> http://lists.jboss.org/pipermail/hibernate-dev/2016-September/015460.html
> 
> 
> I think that allowing this behavior was not a good idea, so I don't have 
> any hope that you consider this as a bug. But I think it should be 
> noticed in the release note 
> (http://in.relation.to/2018/01/18/hibernate-orm-530-beta1-release/) or 
> in this ticket (https://hibernate.atlassian.net/browse/HHH-12101) as a 
> side-effect.
> 
> 
> On my side, I run in this issue because I use QueryDSL-jpa, and the 
> query I give as an example is buggy because it mixes a IN statement 
> (named parameter) dans an EQUAL statement (positional parameter).
> 
> Is there anyone following both Hibernate and QueryDSL here that is 
> already aware or working on this issue ?
> 
> 
> Thanks
> 
> Laurent Almeras
> 


More information about the hibernate-dev mailing list