我正在使用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作为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)
并获取firstname
和albumname
?
答案 0 :(得分:8)
现在如何获取行firstname和albumname作为persons.get(0)返回一个对象
SELECT子句中包含多个 select_expressions 的查询将返回Object[]
(或List
Object[]
)。从JPA规范:
4.8.1 SELECT子句的结果类型
指定的查询结果的类型 通过查询的SELECT子句是一个 实体抽象模式类型,a state-field类型,结果 聚合函数,结果 施工作业,或一些 这些序列。
SELECT子句的结果类型 由结果类型定义 包含在 select_expressions 中 它。当多个 select_expressions 用于SELECT子句,即查询的结果 是类型
Object[]
,和 此结果中的元素对应于 命令他们的顺序 SELECT子句中的规范和 in 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联接部分。