Hibernate - CriteriaBuilderImpl - method treat()

Description

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...

Attachments

1

Activity

Show:

Assignee

Reporter

Worked in

Components

Priority

Created November 15, 2017 at 1:57 PM
Updated March 15, 2018 at 8:09 AM
Loading...