2009-06-07 18 views
6

मान लें कि मेरे पास मात्रा क्षेत्र और मूल्य फ़ील्ड के साथ एक सतत कक्षा वस्तु है। क्या मानदंड बनाने का कोई तरीका है जो मात्रा * मूल्य की गणना करता है?हाइबरनेट मानदंडों में अभिव्यक्ति

उत्तर

9

मुझे लगता है कि आप एक 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

+0

आप कृपया बता सकते हैं समारोह है कि कुल बनाता है जहां है: यह कुछ की तरह होना चाहिए? यह केवल उत्पाद बनाता है। – Victor

1

यह वही नहीं है जो आपने पूछा था, लेकिन आप कुछ भी प्राप्त करने के लिए "व्युत्पन्न गुण" का उपयोग कर सकते हैं।

उदाहरण के लिए, यदि आप एक एसक्यूएल अभिव्यक्ति के लिए एक totalPrice संपत्ति मैप कर सकते हैं:

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

एसक्यूएल सूत्र "मात्रा * कीमत" हर बार इकाई डेटाबेस से लिया गया है मूल्यांकन किया जाता है।

Ori

हाइबरनेट docs इस बारे में अधिक जानकारी होते हैं।

1

यह (शायद) मानदंड के साथ ऐसा संभव नहीं है। लेकिन HQL इसके लिए सहायक हो सकता है।

SELECT ent.quantity*ent.price from EntityName as ent WHERE ent.id = ? 
संबंधित मुद्दे

 संबंधित मुद्दे