2012-02-24 20 views
1

javaオブジェクトで動作するクエリ言語を探しています。 MQL(Mule Query Language)が見つかりました。 ベータ版で、私は多くのドキュメントを見つけられませんでした。 where句やselect句のようなものを試してみました。しかし、注文句は機能していません。Mule Query Language - Order by節

List users = new ArrayList(); 
users.add(new User("Dan", "[email protected]",2,13000 , address)); 
address = new Address("International pkway","Atlatna","GA","USA"); 
users.add(new User("Joe", "[email protected]", 1,14000, address)); 
users.add(new User("John", "[email protected]", 1,16000, address)); 
users.add(new User("Scott", "[email protected]", 1,15000, address)); 
users.add(new User("Andy", "[email protected]", 1,7000, address)); 

Query query = new QueryBuilder() 
.as("p") 
.orderby("income") 
// .max(3) 
.where(eq(property("companyId"), 1)) 
.select(newObject() 
.set("name", "name") 
.set("income", "income") 
.set("email", "email")).build(); 

Collection result1 = query.execute(users); 

いずれかが運MQLで遊んやJavaオブジェクトを照会するために、任意の他の良い枠組みを提案している場合、私に知らせてください。


Another error – when the result set is not hashmap. 

Exception in thread “main” java.lang.ClassCastException: com.mql.test.User cannot be cast to java.util.Map 
at com.mulesoft.mql.impl.OrderByComparator.compare(OrderByComparator.java:11) 
at java.util.Arrays.mergeSort(Arrays.java:1270) 
at java.util.Arrays.sort(Arrays.java:1210) 
at java.util.Collections.sort(Collections.java:159) 
at com.mulesoft.mql.Query.order(Query.java:214) 
at com.mulesoft.mql.Query.execute(Query.java:189) 

    List persons = getPersons(); 

    Query query = new QueryBuilder() 
    // .where(and(eq(property(“division”), “Sales”), 
    // eq(property(“firstName”), “Joe”))) 
    .orderby(“income”) 
    .max(3) 
    .build(); 

答えて

0
public int compare(Object o1, Object o2) { 

     Object r1 = null, r2 = null; 
     if(o1 instanceof Map && o2 instanceof Map) { 
      Map<String,Object> o1Map = (Map<String,Object>) o1; 
      Map<String,Object> o2Map = (Map<String,Object>) o2; 
      r1 = MVEL.executeExpression(expression,o1Map.get(queryBuilder.getAs()), o1Map); 
      r2 = MVEL.executeExpression(expression, o2Map.get(queryBuilder.getAs()), o2Map); 

     }else { 
      r1 = MVEL.executeExpression(expression, o1); 
      r2 = MVEL.executeExpression(expression, o2); 

     } 


     if (r1 instanceof Comparable && r2 instanceof Comparable) { 
      return ((Comparable)r1).compareTo(r2); 
     } 

     if (r1 == null && r2 == null) { 
      return 0; 
     } 

     if (r1 == null) { 
      return -1; 
     } 

     if (r2 == null) { 
      return 1; 
     } 

     return r1.toString().compareTo(r2.toString()); 
    } 
0

IはMQLソースコードを見ました。私たちはOrderByComparatorクラスにバグ(typo)があります。

Object r1 = MVEL.executeExpression(expression, o1.get(queryBuilder.getAs()), o1); 
Object r2 = MVEL.executeExpression(expression, o1.get(queryBuilder.getAs()), **o1)**; 

は次のようになります。

Object r2 = MVEL.executeExpression(expression, o1.get(queryBuilder.getAs()), **o2);**