2013-04-30 174 views
-2

代码片断的列表:我的名单里面遍历对象

public List<Rect> display(){ 
    TypedQuery<Rect> tp = em.createQuery("SELECT s,r FROM Rect r INNER JOIN r.cirlceId.squareCollection s", Rect.class); 
    List<Rect> list = tp.getResultList(); 
return list; 
} 

是这样

[0] Object[] 
    [0] Square 
    [1] Rect 
[1] Object[] 
    [0] Square 
    [1] Rect 
... 

现在你怎么遍历列表以获得正方形或矩形,或者你怎么回Rect的列表?

更新我的问题

我即将JPQL查询小新,我想达到什么是这样的SQL查询:

SELECT * FROM Rect INNER JOIN Square WHERE Rect.squareId = Square.id 

,并在列表

插入结果
+0

您正在返回List Rect的。那么问题是什么? – Jayan 2013-04-30 03:35:51

+0

我认为这意味着'Square'是一个'Rect',他想解析'Rects',但我不明白为什么'Rect'是一个Object []'。需要更多信息。 – 2013-04-30 03:46:11

+0

这就是问题所在,在调用create查询之后,'tp.getResultList()'返回上面树中表示的对象列表值。从对象列表中,我想要得到所有正方形或所有Rects – galao 2013-04-30 03:53:33

回答

2

这只是你如何做到这一点的一个例子。您可以根据您的需要修改它!

for(Object obj : yourList){ 
    if(obj instanceof Square){ 
     // Add to Square List 
    }else if(obj instanceof Rect){ 
     // Add to Rect List 
    }else{ 
     // Do what you want 
    } 
} 
0

您的JPQL查询有多个选择项目。如果您只需要Rect,请将您的查询更改为SELECT r FROM Rect r INNER JOIN r.cirlceId.squareCollection s(删除s)。您可能需要指定SELECT DISTINCT r ...。如果您的squareCollection是eagrly获取,您也可以从对象图(即从您的结果列表中获取Rect r并访问r.circleId.squareCollection.get(0)...)

+0

我对JPQL查询有点新,但我想要实现的东西是这样的SQL查询'选择*从矩形内部联接广场WHERE Rect.squareId = Square.id'我需要每个结果在一个列表 – galao 2013-04-30 06:05:15

+0

然后你得到了这个部分的权利,SQL查询应该是正确的(你可以跳过'INNER'关键字,因为你的JPA提供者会为你做这件事)。也就是说,你可以在我的回答后加上'List ',或者使用你的原始文章'List '。在第一种情况下,您可以使用'r.circle.squareCollection.get(0)'图访问'Square's,或者您可以使用R.J的方法迭代您的结果列表。 – Cascader 2013-04-30 06:17:08

+0

有没有什么办法可以将Square和Rect的值合并到1 List中? – galao 2013-04-30 06:44:58