2010-08-06 9 views
7

क्या createCriteria() में कनवर्ट करना संभव है?क्या GORM में समतुल्य नहीं है?

SELECT * FROM node WHERE (node.type = 'act' AND nid NOT IN (SELECT nid FROM snbr_act_community)) LIMIT 10 

मैं जानता हूँ कि वहाँ एक 'में' ऑपरेटर है और यहाँ क्या मैं अब तक है:

def c = VolunteerOpportunity.createCriteria() 
def matchingActs = c.list { 
    node { 
     eq('type', 'act') 
    } 
    maxResults(10) 
} 

बस अगर यह संभव हो सकता है देखना चाहता हूँ। अन्यथा, मुझे लगता है कि यह एचक्यूएल में सही है?

उत्तर

19

धन्यवाद Sammyrulez। उस से एक विचार मिला। इसका परीक्षण किया लेकिन यह काम नहीं किया। मैंने इसे ठीक किया और यहां अंतिम कामकाजी कोड है:

def ids = [14400 as long, 14401 as long] 

def c = VolunteerOpportunity.createCriteria() 
def matchingActs = c.list { 
    node { 
     eq('type', 'act') 
     not { 'in'(ids) } 
    } 
    maxResults(10) 
} 

अब मुझे पता है कि 'नहीं' ऑपरेटर का उपयोग कैसे करें। आपका बहुत बहुत धन्यवाद!

8

ने इसे स्वयं की कोशिश नहीं की लेकिन Grails डॉक्टर और हाइबरनेट एपीआई को देखकर आप इस बिल्डर मानचित्र पर हाइबरनेट मानदंड एपीआई 1 के प्रतिबंध वर्ग में पाए गए स्थिर तरीकों के साथ नोड्स बनाते हैं। तो कोड के लिए नहीं विधि के साथ की तरह

def c = VolunteerOpportunity.createCriteria() 
def matchingActs = c.list { 
    node { 
     not(in('propertyName', ['val1','val2'])) 
    } 
    maxResults(10) 
} 

कुछ जब से तुम विधि में श्रृंखला (है कि एक मानदंड रिटर्न) (कि तर्क के रूप में एक नकार संस्करण एक मानदंड लेता है और रिटर्न)

+3

धन्यवाद। 'नहीं' ऑपरेटर का उपयोग करने के बारे में एक विचार आया। – firnnauriel

1
इस

समाधान है:

def resultat=EnteteImputationBudgetaire.createCriteria().get{ 
      between("dateDebutPeriode", dateDebut, dateFin) 

      and{ eq 'natureImputationBudgetaire','FONCTIONNEMENT' } 
      maxResults(1) 
     } 

     def resultat2=ParametragePlanBudgetaire.createCriteria().list() { 
      like('composantBudgetaire','6%') 
      if(resultat?.details) { 
       not { 
        'in'('composantBudgetaire',resultat?.details?.imputationBudgetaire) 
       } 
      } 
     } 
1

Grails प्रलेखन के अनुसार के बारे में मापदंड here बनाते समय, आप कुछ इस तरह का उपयोग कर सकते हैं:

not {'in'("age",[18..65])} 

इस उदाहरण में, आप एक संपत्ति "age" नामित किया है और आप उन पंक्तियों को प्राप्त करना चाहते हैं जो 18 से 65 के बीच नहीं हैं। बेशक, [18..65] भाग को मूल्यों या श्रेणी की किसी भी सूची के साथ प्रतिस्थापित किया जा सकता है।

1

बस याद: इस मामले में आप कोष्ठकों का प्रयोग करने की जरूरत नहीं है और आप inList उपयोग कर सकते हैं, उदाहरण के लिए: नमूना कोड के लिए

not { inList 'age',[18..65] } 
संबंधित मुद्दे