2010-05-19 9 views
5

क्या हाइबरनेट प्रक्षेपण उपनाम भी काम करते हैं? मैं इसे कसम खाता हूँ बस नहीं करता है। कम से कम, ऐसा नहीं करता है जो मैं अपेक्षा करता हूं।हाइबरनेट मानदंड प्रक्षेपण उपनाम का उपयोग नहीं किया जा रहा है

select 
    sum(this_.number_of_points) as y0_, 
    this_.person_id as y1_ 
from 
    PERSON_PROGRAM_ACTIVITY this_ 
group by 
    this_.person_id 
order by 
    this_.number_of_points desc 

यह सब पर अन्य नाम का उपयोग करने के लिए प्रतीत नहीं होता:

return sessionFactory.getCurrentSession() 
    .createCriteria(PersonProgramActivity.class) 
    .setProjection(Projections.projectionList() 
     .add(Projections.alias(Projections.sum("numberOfPoints"), "number_of_points")) 
     .add(Projections.groupProperty("person.id"))) 
    .setFirstResult(start) 
    .setFetchSize(size) 
    .addOrder(Order.desc("numberOfPoints")) 
    .list(); 

यहाँ एसक्यूएल कि यह उत्पन्न करता है:

यहाँ जावा है। मुझे लगता है कि उपनाम सेटिंग का मतलब यह होगा कि sum(this_.number_of_points)number_of_points के रूप में उपनामित किया जाएगा और y0_ नहीं होगा। क्या कोई चाल है जो मुझे याद आ रही है?

धन्यवाद।

उत्तर

6

आपको पूरे मानदंड को उपनाम देने की आवश्यकता है, तो आप वास्तव में उपयोग किए जाने वाले अन्य उपनाम बना सकते हैं। अजीब बात यह है कि उपनाम दूसरे तरीके के बजाय y0_ में बदल जाते हैं।

select 
    sum(this_.number_of_points) as y0_, 
    this_.person_id as y1_ 
from 
    PERSON_PROGRAM_ACTIVITY this_ 
group by 
    this_.person_id 
order by 
    this_.y0_ desc 
+0

+1 मैं रूप में अच्छी तरह बात इस तरह का देखा है, मैं सबक्वेरी के साथ लगता है होना चाहिए:

return sessionFactory.getCurrentSession() .createCriteria(PersonProgramActivity.class, "ppa") .setProjection(Projections.projectionList() .add(Projections.alias(Projections.sum("numberOfPoints"), "ppa.numberOfPoints")) .add(Projections.groupProperty("person.id"))) .setFirstResult(start) .setFetchSize(size) .addOrder(Order.desc("ppa.numberOfPoints")) .list(); 

निम्नलिखित एसक्यूएल उत्पन्न करता है। – Justin

1

क्वेरी

return sessionFactory.getCurrentSession() 
    .createCriteria(PersonProgramActivity.class, "ppa") 
    .setProjection(Projections.projectionList() 
     .add(Projections.alias(Projections.sum(**"ppa.numberOfPoints"**), **"numberOfPoints"**)) 
     .add(Projections.groupProperty("person.id"))) 
    .setFirstResult(start) 
    .setFetchSize(size) 
    .addOrder(Order.desc("ppa.numberOfPoints")) 
    .list(); 
संबंधित मुद्दे