2 Replies Latest reply on Nov 21, 2017 8:38 AM by Stanislav Grushevskiy

    WildFly 11 - Hibernate - CriteriaBuilderImpl - method treat()

    Stanislav Grushevskiy Newbie

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