由于关于模型的游戏文档很糟糕,我会问这里。我有基本代码;
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();
}
}
我要做的是获取从SQL查询返回的第一个值返回的'itemname'的值(真正的查询要复杂得多,其他的东西也不能用方法替换)。我可以使用item.get(0)
获取整个第一个对象,但我无法弄清楚如何将'itemname'的值作为字符串获取,并且它似乎没有在任何地方记录。
可能应该在原始问题中提到过,我需要按字段名称检索,而不是索引。 I.E.我做不到items.get(0)[0];
我需要做items.get(0)['itemname'];
答案 0 :(得分:5)
如果您阅读文档in here,则说明这一点。 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);
修改强>
在检索部分,您将获得一个Item列表,因此您可以直接访问该对象上的字段:
item.get(0).getItemName();
答案 1 :(得分:3)
由于Play使用了Hibernate,因此您需要查看Hibernate's documentation。
特别是,SELECT itemname,id ...
会产生Object[]
而不是Item
,因此您可以按以下方式获取itemname
:
List<Object[]> items = ...;
String itemname = items.get(0)[0];
答案 2 :(得分:0)
如果你必须做select itemname,id ...
,你将无法做items.get(0)["itemname"]
,因为正如axtavt和Pere所提到的那样,你会得到一个Object []。您可以创建另一个(可能是不可变的)实体类,可以在此查询中使用。有关详细信息,请参阅hibernate documentation。然后,您可以根据查询要求对实体进行建模,并使用它来获取信息,从而让hibernate为您处理所有神奇数字游戏。这样,你就会得到一个带有填充值的bean,你可以用它来映射回你的模型类。
HTH!