6

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 作为 people.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

4

1 回答 1

8

现在如何在 people.get(0) 返回一个对象时获取 firstname 和 albumname 行

在 SELECT 子句中具有多个select_expressionObject[]的查询返回一个(或一个Listof Object[])。从 JPA 规范:

4.8.1 SELECT 子句的结果类型

查询的 SELECT 子句指定的查询结果的类型是实体抽象模式类型、状态字段类型、聚合函数的结果、构造操作的结果或这些的一些序列。

SELECT 子句的结果类型由其中包含的select_expressions的结果类型定义。在 SELECT 子句中使用多个 select_expression时,查询的结果是 type Object[],并且该结果中的元素按照它们在 SELECT 子句中指定的顺序和 type 对应于每个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]);
}

请注意,通过在 FROM 子句中使用笛卡尔积和在 WHERE 子句中的连接条件来指定内部连接不如在实体关系上指定显式连接(使用[LEFT [OUTER] | INNER ] JOIN语法)典型。请参阅规范中的整个第4.4.5 节加入

参考

  • JPA 1.0 规范
    • 第 4.8.1 节“SELECT 子句的结果类型”
    • 第 4.8.2 节“SELECT 子句中的构造函数表达式”
    • 第 4.4.5 节“连接”
于 2010-08-25T20:54:38.647 回答