2015-05-18 2 views
0

Я работаю с Play Framework 2.3.8 (Java) и Ebean. Мой проект растет хорошо, и теперь я ищу решения для поиска передовой информации из моей базы данных.Ebean & Play Framework 2.3.8: Отсутствующие утверждения

Но я не могу найти способ использования оператора count() или оператора group by. Я проверил документацию по ebean, но не упоминает об этом, поэтому мой вопрос: эти заявления даже включены в ebean? Или мне нужно использовать что-то особенное для такого рода запросов?

Мой запрос в SQL выглядит следующим образом:

"select thing, COUNT(thing) as count from Table group by thing"; 

Спасибо большое за вашу помощь.

+0

Я пытался "вернуть find.select (" вещь, считай (вещь) "), где() findList();.. Для подсчета() части, и получил" не найдено для модели » Я понятия не имею, для группового заявления. – Thib

ответ

2

Здесь у вас есть 3 подхода, первый (ответил Антон) с SqlQuery, второй - к сожалению, без доступа к полям псевдонима, третий - позволяет группировать и отображать ваши поля псевдонимов в поля модели Transient.

// First approach: returns list of `raw` rows so it's mpst flexible 
    List<SqlRow> rows = Ebean 
      .createSqlQuery("SELECT id, count(bar) AS bar_count FROM foo WHERE 1 GROUP BY bar") 
      .findList(); 


    // Second uses `GROUP BY`, returns entities BUT without alias fields 
    List<Foo> foos = Ebean 
      .createQuery(Foo.class, "WHERE 1 GROUP BY bar") 
      .select("id") 
      .findList(); 

    // or just... 
    List<Foo> foos2 = Foo 
      .find.where("1 GROUP BY bar") 
      .findList(); 

    // Third, returns entities, alias fields can be mapped to model as well (requires @Transient annotation for these fields in model) 
    RawSql rawSql = RawSqlBuilder 
      .parse("SELECT id, count(bar) FROM foo WHERE 1 GROUP BY bar") 
      .columnMapping("id", "id") 
      .columnMapping("count(bar)", "bar_count") 
      .create(); 

    com.avaje.ebean.Query<Foo> query = Ebean.find(Foo.class); 
    query.setRawSql(rawSql); 

    List<Foo> foosRaw = query.findList(); 
1

Вы можете использовать http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/SqlQuery.html

String sql = "select thing, COUNT(thing) as count from Table group by :thing"; 

SqlQuery sqlQuery = Ebean.createSqlQuery(sql); 
sqlQuery.setParameter("thing", "FOO"); 

// execute the query returning a List of MapBean objects 
List<SqlRow> list = sqlQuery.findList(); 

Тогда вы можете работать с SqlRow с в JDBC-моды - получение целых чисел, строк и так далее ...

+0

Да, это то, чего я боялся, ни одна группа по выражению, определенная непосредственно в ebean. Но, это нормально, это работает. Спасибо за вашу помощь;) – Thib