Java PlayFramework从模型选择中获取字段

Java PlayFramework从模型选择中获取字段,java,jpa,playframework,Java,Jpa,Playframework,因为关于模型的播放文档很糟糕,所以我会在这里询问。我有基本的代码 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 == nul

因为关于模型的播放文档很糟糕,所以我会在这里询问。我有基本的代码

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();
        }
    }
公共静态无效控制器(){
List item=item.find(“从item中选择itemname,id,其中itembool=true ORDER BY itemcreated ASC LIMIT 0,1”).fetch();
如果(项==null){
notFound();
}
}
我要做的是获取从SQL查询返回的第一个值返回的'itemname'的值(真正的查询要复杂得多,还有其他一些事情,所以不能用方法替换)。我可以使用
item.get(0)
获取整个第一个对象,但我不知道如何将“itemname”的值作为字符串获取,而且似乎在任何地方都没有文档记录

编辑
可能应该在原始问题中提到,我需要按字段名而不是索引进行检索。即我不能做
项。获取(0)[0]我需要做
项。获取(0)['itemname']

由于Play在引擎盖下使用Hibernate,您需要查看一下

特别是,
SELECT itemname,id…
产生
Object[]
而不是
Item
,因此您可以获得
itemname
,如下所示:

List<Object[]> items = ...;
String itemname = items.get(0)[0];
列表项=。。。;
String itemname=items.get(0)[0];

如果您阅读了文档,它会对此进行解释。Hibernate不使用SQL,而是使用JPQL,它在处理对象而不是单个字段时使用不同的语法

您想做的事情可以通过两种方式实现(都在文档中):


如果您必须执行
选择itemname,id…
,您将无法执行
items.get(0)[“itemname”]
,因为正如axtavt和Pere所提到的,您将获得一个对象[]。您可以创建另一个(可能是不可变的)实体类,该实体类可用于此查询。详情请参阅。然后,您可以根据查询需求对实体进行建模,并使用它获取信息,从而让hibernate为您处理所有的魔术数字游戏。这样,您将拥有一个带有填充值的bean,如果您愿意,可以使用它映射回您的模型类


你需要什么额外的细节?当JPA使用JPQL时,您试图运行SQL,但它无法正常工作。@PereVillega我需要从具有多个输出的select中获取一个字段,并通过其字段名引用它,而不是INDExpress重新读取我的答案
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.get(0).getItemName();