使用JPQL从两个表中选择

我正在使用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)); } 

现在我想获取专辑名称和roleuser的名为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作为persons.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作为persons.get(0)返回一个对象

SELECT子句中具有多个select_expressions的查询返回Object[] (或List of Object[] )。 从JPA规范:

4.8.1 SELECT子句的结果类型

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

SELECT子句的结果类型由其中包含的select_expressions的结果类型定义。 当在SELECT子句中使用多个select_expressions时,查询的结果是Object[]类型,并且此结果中的元素按照SELECT子句中的规范顺序和每个类型的结果类型的顺序对应。 select_expressions

所以在你的情况下,你可能想要这样的东西:

 for (i=0;i 

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

参考

  • JPA 1.0规范
    • 第4.8.1节“SELECT子句的结果类型”
    • 第4.8.2节“SELECT子句中的构造函数表达式”
    • 第4.4.5节“连接”