Выражения в в спящем режиме критерии

Однострочное, встроенное решение для этого (поддерживает v2 / v3, итераторы, использует стандартную библиотеку и понимание одного генератора):

import itertools
def split_groups(iter_in, group_size):
     return ((x for _, x in item) for _, item in itertools.groupby(enumerate(iter_in), key=lambda x: x[0] // group_size))
6
задан Paul Morie 7 June 2009 в 13:36
поделиться

3 ответа

Я думаю, вы также можете использовать проекцию SQL. Это должно быть примерно так:

session.createCriteria(Item.class) 
        .createAlias("item", "i") 
        .setProjection( Projections.projectionList() 
            .add( Projections.groupProperty("i.id") ) 
            .add( Projections.groupProperty("i.price") ) 
            .add( Projections.groupProperty("i.quantity") ) 
            .add( Projections.sqlProjection( 
                    "price * quantity as total", 
                    new String[] { "total" }, 
                    new Type[] { Hibernate.DOUBLE } 
                  ) 
            ) 
        ); 

Ори

9
ответ дан 9 December 2019 в 22:39
поделиться

Это не совсем то, что вы просили, но вы можете использовать «производные свойства» для получения чего-то похожего.

Например, вы можете сопоставить свойство totalPrice с выражением SQL:

<property name="totalPrice" formula="quantity * price" type="big_decimal"/> 

Формула SQL «количество * цена» вычисляется каждый раз, когда объект извлекается из базы данных.

Ori

Hibernate docs содержат дополнительную информацию об этом.

1
ответ дан 9 December 2019 в 22:39
поделиться

Это (вероятно) невозможно сделать с помощью критериев. Но HQL может быть здесь полезен.

SELECT ent.quantity*ent.price from EntityName as ent WHERE ent.id = ?
1
ответ дан 9 December 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: