{code} CriteriaUpdate<Item> update = criteriaBuilder.createCriteriaUpdate(Item.class); Root<Item> i = update.from(Item.class); update.set( i.get(Item_.active), true ); update.set( i.get(Item_.name), "Foo" );
int updatedEntities = em.createQuery(update).executeUpdate(); {code}
Renders invalid HQL:
{code} update Item as generatedAlias0 set generatedAlias0.active = :param0generatedAlias0.name = :param1, {code}
Note the missing comma and space between ":param0" and "generatedAlias0.name" and the comma at the end .
Simple fix, append a space in this code unless the last assignment is being rendered, code in CriteriaUpdateImpl appending the comma and space is wrong :
{code}
private void renderAssignments(StringBuilder jpaql, RenderingContext renderingContext) { jpaql.append( " set " ); boolean first = true; for ( Assignment assignment : assignments ) { jpaql.append( assignment.attributePath.render( renderingContext ) ) .append( " = " ) .append( assignment.value.render( renderingContext ) ); if ( ! first ) { // Should be !last jpaql.append( ", " ); } // FIX THIS! first = false; } } {code}
|