Выражения в критериях гибернации - PullRequest
6 голосов
/ 07 июня 2009

Допустим, у меня есть постоянный класс Item с полем количества и полем цены. Есть ли способ построить Критерии, которые вычисляют сумму количества * цена?

Ответы [ 3 ]

9 голосов
/ 07 июня 2009

Я думаю, вы также можете использовать проекцию 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 } 
                  ) 
            ) 
        ); 

Ori

1 голос
/ 07 июня 2009

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

SELECT ent.quantity*ent.price from EntityName as ent WHERE ent.id = ?
1 голос
/ 07 июня 2009

Это не совсем то, что вы просили, но вы можете использовать "производные свойства", чтобы получить нечто похожее.

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

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

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

Ori

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...