我正在使用 JPQL 检索数据。我可以使用语句获取数据

List persons = null;
persons = em.createQuery("select p.albumName from PhotoAlbum p , Roleuser r 
where r = p.userId and r.userID = 1");

现在,我可以使用以下方式获得专辑名称:

int i=0;
for (i=0;i<persons.size(); i++)
{   
     System.out.println("Testing n "+ i +" " +  persons.get(0));
}

现在,我想获得专辑名称和角色扮演者的命名 firstname

我正在使用查询

persons = em.createQuery("select r.firstName , p.albumName from PhotoAlbum p ,   
Roleuser r where r = p.userId and r.userID = 1").getResultList();

现在,我如何在人身上获取行firstname和albumname。get(0)正在返回对象

通过运行代码:

 for (i=0;i<persons.size(); i++)
    {
        //r = (Roleuser) persons.get(i);
        System.out.println("Testing n "+ i +" " + persons.get(i));
    }

我得到了:

Testing n 0 [Ljava.lang.Object;@4edb4077
INFO: Testing n 1 [Ljava.lang.Object;@1c656d13
INFO: Testing n 2 [Ljava.lang.Object;@46dc08f5
INFO: Testing n 3 [Ljava.lang.Object;@654c0a43

我如何映射 persons.get(0) 并得到 firstnamealbumname?

有帮助吗?

解决方案

现在,如何将行firstname和albumname作为个人获取。get(0)正在返回对象

具有多个的查询 select_expressions 在选择子句中返回 Object[] (或a ListObject[])。根据JPA规范:

4.8.1选择子句的结果类型

查询的选择子句指定的查询结果的类型是实体抽象模式类型,一种状态场类型,骨料函数的结果,构造操作的结果或其中的某些序列。

选择子句的结果类型由 select_expressions 包含在其中。当多个 select_expressions 在选择子句中使用,查询的结果是类型 Object[], ,并且此结果中的元素按顺序与选择子句中的规范顺序相对应 select_expressions.

因此,就您而言,您可能想要这样的东西:

for (i=0;i<persons.size(); i++) {
    //r = (Roleuser) persons.get(i);
    System.out.println("Testing n " + i + " " + persons.get(i)[0] + ", " + 
        persons.get(i)[1]);
}

请注意,通过在从子句中使用笛卡尔产品来指定内部联接,以及在Whater子句中的联接条件,而不是指定实体关系的明确连接(使用该条款)(使用 [LEFT [OUTER] | INNER ] JOIN 句法)。查看整个部分 4.4.5加入 在规格中。

参考

  • JPA 1.0规格
    • 第4.8.1节“选择子句的结果类型”
    • 第4.8.2节“ select子句中的构造函数”
    • 第4.4.5节“加入”
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top