У меня тоже есть эта проблема.Мой текущий обходной путь - НЕ использовать именованные параметры, а вместо этого использовать позиции.
Для меня это не большая проблема, потому что я сохраняю параметры запроса в своем собственном объекте в списке.
public void apply( final CategoryFilter f )
{
final String jsonFilter = f.getFilter();
final QueryParameters queryParams = QueryParameters.createFromJsonString( jsonFilter );
final StringBuilder queryStringBuilder =
new StringBuilder( "UPDATE Transaction t SET t.category = 'myCatergory' WHERE " );
boolean isFirst = true;
for ( final QueryParameter queryParam : queryParams.getQueryParams() )
{
if (!isFirst)
{
queryStringBuilder.append( " AND " );
}
else
{
isFirst = false;
}
queryStringBuilder.append( "t." );
queryStringBuilder.append( queryParam.getField() );
queryStringBuilder.append( " " );
queryStringBuilder.append( queryParam.getOp() );
queryStringBuilder.append( " ? " );
}
final Query q = getSession().createQuery( queryStringBuilder.toString() );
int index = 0;
for ( final QueryParameter queryParam : queryParams.getQueryParams() )
{
q.setParameter( index++, queryParam.getValue() );
}
q.executeUpdate();
}