2012-12-10 5 views
5

मैं Ebean के साथ एक Play2 एप्लिकेशन बनाने रहा हूँ के साथ इस सूची में चयन करते। मैं आईडी की एक सूची से स्थानों प्राप्त करने के लिए एक विधि के साथ एक सेवा वर्ग बनाया है:मैं कैसे Ebean createSqlQuery

public static List<Venue> getVenuesForIds(List<Long> list){   
    ArrayList<Venue> venues = new ArrayList<Venue>(); 
    String sql = "select c.id, c.name from Company c where in (:ids)"; 
    List<SqlRow> sqlRows = 
       Ebean.createSqlQuery(sql).setParameter("ids", list).findList();   
    for(SqlRow row : sqlRows) { 
     venues.add(new Venue(row.getLong("id"), row.getString("name"))); 
    }   
    return venues; 
} 

लेकिन मैं हो रही है:

[PersistenceException: Query threw SQLException:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'in (201639091,201637666)' at line 1 Query was: select c.id, c.name from Company c where in (?,?) ] 

मैं http://www.avaje.org/ebean/introquery.html के माध्यम से पढ़ा है, लेकिन शायद सही सिंटैक्स याद किया। मैं कच्चे एसक्यूएल में ऐसा करना चाहता हूं। मुझे क्या याद आया?

+0

बस उत्सुक: 'Venue' एक मॉडल है जो तालिका का नाम है' कंपनी 'या आप चयन कर रहे हैं यह अन्य मॉडल की वस्तुओं के साथ? – biesior

+0

हैलो! मैं एक नए ऐप से डेटाबेस तक पहुंच रहा हूं जहां स्थल इकाई के लिए अधिक उपयुक्त नाम है। – jakob

उत्तर

3

आपका अनुरोध सही प्रतीत नहीं होता।

के बारे में क्या:

"select c.id, c.name from Company c where c.id in (:ids)"; 
+0

हां बिल्कुल! धन्यवाद! – jakob

3

यदि आप (एक बार) अपने Venue मॉडल में आम Finder<I,T> इस्तेमाल करेंगे, यह काफी अच्छा होगा, जैसे कि 'परिष्कृत' क्वेरी प्रदर्शन करने की जरूरत नहीं है:

public static List<Venue> getVenuesForIds(List<Long> ids){   
    return Venue.find.select("id,name").where().idIn(ids).findList(); 
} 
:
@Entity 
@Table(name = "Company") 
public class Venue extends Model { 

    @Id 
    public Long id; 
    public String name; 
    // other fields 

    public static Finder<Long, Venue> find 
      = new Finder<Long, Venue>(Long.class, Venue.class); 
} 

तो फिर आप के साथ ... अपने विधि में कोड की एक पंक्ति में एक ही काम कर सकते हैं

या इसी तरह के expresion साथ:

public static List<Venue> getVenuesForIds(List<Long> ids){   
    return Venue.find.select("id,name").where().in("id",ids).findList(); 
} 
+0

धन्यवाद और आप निश्चित रूप से सही हैं! लेकिन इस मामले में मैं कच्चे वर्ग का उपयोग करना चाहता हूं क्योंकि मैं बाद में जुड़ूंगा और मैं अपने कोड में इसके लिए इकाइयां बनाना नहीं चाहता हूं। – jakob

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