代码之家  ›  专栏  ›  技术社区  ›  Pradyut Bhattacharya

使用JPQL从两个表中选择

  •  4
  • Pradyut Bhattacharya  · 技术社区  · 14 年前

    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();
    

    通过运行代码:

     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) 去拿那个 albumname ?

    1 回复  |  直到 7 年前
        1
  •  8
  •   Pascal Thivent    14 年前

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

    具有多个 在SELECT子句中返回 Object[] (或 List 属于 ). 根据JPA规范:

    4.8.1 SELECT子句的结果类型

    指定的查询结果的类型 查询的SELECT子句是 实体抽象模式类型 聚合函数 施工作业,或一些

    SELECT子句的结果类型 由的结果类型定义 这个 选择表达式 包含在 选择表达式 在查询结果SELECT子句中使用 属于类型 对象[] ,和 此结果中的元素对应于 按他们的顺序 SELECT子句中的规范和 类型中的每个 选择表达式 .

    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.2节“SELECT子句中的构造函数表达式”
      • 第4.4.5节“连接”