PlayFramework получить поле от выбора модели - PullRequest
3 голосов
/ 24 ноября 2011

Так как игровая документация на модели ужасна, спрошу здесь. У меня есть основной код;

public static void Controller() {
        List<Item> item = Item.find("SELECT itemname,id FROM Item WHERE itembool = true ORDER BY itemcreated ASC LIMIT 0,1").fetch();

        if ( item == null ) {
            notFound();
        }
    }

То, что я пытаюсь сделать, это получить значение для 'itemname', возвращаемое для первого значения, возвращенного из SQL-запроса (реальный запрос намного сложнее и других вещей, поэтому его нельзя заменить методами). Я могу получить весь первый объект с помощью item.get(0), но не могу понять, как получить значение 'itemname' в виде строки, и это нигде не документировано.

Редактировать

Вероятно, следовало упомянуть в исходном вопросе, мне нужно получить по имени поля, а не по индексу. И.Е. Я не могу сделать items.get(0)[0]; Мне нужно сделать items.get(0)['itemname'];

Ответы [ 3 ]

5 голосов
/ 25 ноября 2011

Документация объясняет это, если вы прочитаете это, здесь . Hibernate не использует SQL, но JPQL, который имеет другой синтаксис, так как он работает с объектами, а не с отдельными полями.

То, что вы хотите сделать, может быть достигнуто двумя способами (оба в документации):

List<Item> item = Item.find("SELECT i FROM Item i WHERE i.itembool = true ORDER BY i.itemcreated ASC").fetch(1);

List<Item> item = Item.find("itembool = true ORDER BY itemcreated ASC").fetch(1);

EDIT:

В поисковой части вы получите список Item, поэтому вы можете просто получить доступ к полю непосредственно на объекте:

item.get(0).getItemName();
3 голосов
/ 24 ноября 2011

Так как Play использует Hibernate под капотом, вам нужно взглянуть на документацию Hibernate .

В частности, SELECT itemname,id ... дает Object[] вместо Item, поэтомучто вы можете получить itemname следующим образом:

List<Object[]> items = ...;
String itemname = items.get(0)[0];
0 голосов
/ 04 декабря 2011

хорошо, если вам нужно сделать select itemname,id ..., вы не сможете сделать items.get(0)["itemname"], потому что, как упоминали axtavt и Pere, вы получите Object [] обратно. Вместо этого вы можете создать другой (возможно неизменный) класс сущностей, который можно использовать в этом запросе. Пожалуйста, обратитесь к hibernate документации для деталей. Затем вы можете смоделировать сущность на основе требований вашего запроса и использовать ее для извлечения информации, что позволяет hibernate обрабатывать все игры с магическими числами для вас. Таким образом, у вас будет компонент с заполненными значениями, который вы можете использовать для отображения обратно в класс вашей модели, если хотите.

НТН!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...