【问题标题】:Traversing a list of object遍历对象列表
【发布时间】:2013-04-30 03:33:58
【问题描述】:

代码sn-p:

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
...

现在如何遍历列表得到方形或矩形,或者如何返回一个矩形列表?

更新了我的问题

我对 JPQL 查询有点新,我想要实现的是这样的 SQL 查询:

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

并将结果插入列表

【问题讨论】:

  • 您正在返回矩形列表。那么问题是什么?
  • 我认为这意味着SquareRect,他想解析出Rects,但我不明白为什么RectObject[]。需要更多信息。
  • 这就是问题所在,在调用 create 查询后,tp.getResultList() 返回了上面树所述的对象列表的值。从对象列表中,我想获取所有 Squares 或所有 Rects
  • @galao:那么'TypedQuery'声明有什么用。不应该只返回 Rect.class 的对象吗? instanceof 会有所帮助,但我想你的问题是列表中的对象不是 Rect.class
  • 我试图检索 Rect 结果,但失败了。即使只有一个列表,它也会返回一个包含 Rect 和 Square 的对象列表。

标签: java jpa


【解决方案1】:

这只是一个关于如何做到这一点的示例。您可以根据自己的需要进行修改!

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
    }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我对 JPQL 查询有点新意,但我想要实现的是类似这样的 SQL 查询 SELECT * FROM Rect INNER JOIN Square WHERE Rect.squareId = Square.id 我需要将每个结果都放在一个列表中
    • 那么你做对了,SQL 查询应该是正确的(你可以跳过 INNER 关键字,因为你的 JPA 提供商会为你做这件事)。也就是说,您可以在我的回答之后获得List&lt;Rect&gt;,也可以使用您的原始帖子获得List&lt;Object[]&gt;。在第一种情况下,您可以使用图表r.circle.squareCollection.get(0) 访问Squares,或者您可以使用R.J 的方法来迭代您的结果列表。
    • 有什么方法可以将 Square 和 Rect 的值合并到 1 个 List 中?
    • 我能想到的唯一方法就是继承。如果SquareRect 都继承自一个超类(比如Shape),你可以这样做。检查this。即便如此,你最终会得到一个List&lt;Shape&gt;,然后使用 instanceof 来区分子类型。
    猜你喜欢
    • 1970-01-01
    • 2019-02-11
    • 2011-08-19
    • 2018-05-08
    • 2015-03-17
    • 2011-06-11
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多