2014-03-19 35 views
0

我已经开始使用JPA 2/JPQL。我看到很多返回query.getResultList()的例子。但从未见过标记为不可修改的结果列表。例如:JPA查询getResultList不可修改列表?

final TypedQuery<String> query = entityManager.createNamedQuery("Some query", String.class); //$NON-NLS-1$ 
    return query.getResultList(); 

是否有任何理由不应该被标记为不可修改,如果我不期望改变从数据库返回的结果集? 任何可能导致问题的原因?

+0

它已从getResultList中不可修改。尝试在返回的列表中添加内容并亲自查看 - 您将得到一个异常 – Amalgovinus

回答

1

这更是没有理由标记为不可修改。如果您想更改列表的内容,请随时取阅,这只是数据库的结果。

查询对象中的列表没有理由使其不可修改。这只是一个内存中的数据库内容,因此修改此列表不会对数据库进行更改,除非您实际上保留了这个新列表。

+0

感谢您的快速回复,@ david99world。 因此,如果我知道这个列表应该在我的应用程序中以只读方式使用,那么您建议对其进行修改以使其不可修改? – ND27

+0

我没有看到你这样做的任何问题,但我想我的问题是为什么它需要这样做?这似乎只是防御性的编程,而不是真正的问题。 – david99world

+0

有人在他们查看代码时提出了这个问题 - 因为该方法返回一个预期只能读取的集合。 我以前曾经遇到过这个博客文章(http://vard-lokkur.blogspot.com/2011/04/jpa-and-unmodifiable-collections.html),它暗示了一些这样做的缺点。我曾尝试过不可修改的自己,但没有看到任何问题。我也找不到围绕这些方面的讨论 - 所以只是想检查一下。 – ND27