Expressions in hibernate criteria

后端 未结 3 781
再見小時候
再見小時候 2021-01-12 22:59

Let\'s say I have a persistent class Item with a quantity field and a price field. Is there a way to build a Criteria that calculates the sum of quantity*price?

相关标签:
3条回答
  • 2021-01-12 23:24

    It's not exactly what you asked for, but you can use "derived properties" to get something rather similar.

    For example, you can map a totalPrice property to an SQL expression:

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

    The SQL formula "quantity * price" is evaluated every time the entity is retrieved from the database.

    Ori

    The Hibernate docs contain more info about this.

    0 讨论(0)
  • 2021-01-12 23:30

    I think you can also use an SQL projection. It should be something like:

    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

    0 讨论(0)
  • 2021-01-12 23:43

    It is (probably) not possible to do it with Criteria. But HQL can be helpful for this.

    SELECT ent.quantity*ent.price from EntityName as ent WHERE ent.id = ?
    
    0 讨论(0)
提交回复
热议问题