In WildFly 11 Hibernate was updated from 5.0.7.Final to 5.1.10.Final.
In new Hibernate "joins.add( treatAs );" adds extra JOIN to database query, so every row appears twice in result.
Hibernate 5.0.7.Final
public <X, T, V extends T> Join<X, V> treat(Join<X, T> join, Class<V> type) { return ( (JoinImplementor) join ).treatAs( type ); }
Hibernate 5.1.10.Final
public <X, T, V extends T> Join<X, V> treat(Join<X, T> join, Class<V> type) { final Set<Join<X, ?>> joins = join.getParent().getJoins(); final Join<X, V> treatAs = ( (JoinImplementor) join ).treatAs( type ); joins.add( treatAs ); return treatAs; }
Result query:
Hibernate 5.0.7.Final
select internalbl0_.* from blrecord internalbl0_ inner join blentry entries1_ on internalbl0_.id=entries1_.record_id where internalbl0_.dtype='1' and entries1_.dtype=$1 and entries1_.value=$2 and internalbl0_.status=$3 group by internalbl0_.id having count(internalbl0_.id)=1
Hibernate 5.1.10.Final
select internalbl0_.* from blrecord internalbl0_ inner join blentry entries1_ on internalbl0_.id=entries1_.record_id inner join blentry entries2_ on internalbl0_.id=entries2_.record_id where internalbl0_.dtype='1' and entries2_.dtype=$1 and entries2_.value=$2 and internalbl0_.status=$3 group by internalbl0_.id having count(internalbl0_.id)=1
To make it works I need to add DISTINCT to "count(internalbl0_.id)" => "count(DISTINCT internalbl0_.id)".
Hibernate 5.2.12.Final
I've replaced 5.1.10 with 5.2.12 in WildFly 11 and got the same extra JOIN.
How should I use treat method? May be approach was changed...
|