Java持久性:将Query.getResultList()的结果强制转换为其他内容?

Java持久性:将Query.getResultList()的结果强制转换为其他内容?,java,hibernate,casting,persistence,Java,Hibernate,Casting,Persistence,大家好,我是持久性/休眠新手,我需要你们的帮助 情况是这样的。我有一张桌子,里面有一些东西。让我们称他们为人吧。 我想从数据库中获取该表中的所有条目 我有一个Person类,它是一个简单的POJO,表中的每一列都有一个属性(名称、年龄等) 以下是我所拥有的: Query lQuery = myEntityManager.createQuery("from Person") List<Person> personList = lQuery.getResultList(); 会有用的。

大家好,我是持久性/休眠新手,我需要你们的帮助

情况是这样的。我有一张桌子,里面有一些东西。让我们称他们为人吧。 我想从数据库中获取该表中的所有条目

我有一个Person类,它是一个简单的POJO,表中的每一列都有一个属性(名称、年龄等)

以下是我所拥有的:

Query lQuery = myEntityManager.createQuery("from Person")
List<Person> personList = lQuery.getResultList();
会有用的。。但事实并非如此


有办法做到这一点吗?持久性允许我设置查询的返回类型吗?(可能是通过泛型?

我也被这个问题困扰了一段时间。您可以遍历列表并进行检查,但我希望噪音更小。我所看到的绕过这一点的最短方法是让警告保持沉默,但我对此也感到非常不舒服。我想看看其他的解决方案

@SuppressWarnings("unchecked") 
List<Person> personList = lQuery.getResultList();
@SuppressWarnings(“未选中”)
List personList=lQuery.getResultList();

嗯,在研究过程中,我在java.net上发现了一个有趣的问题。我发现用户的评论特别有趣

有java Collections类解决方案,但您没有解释您的强制转换是如何失败的,或者只是发出警告

这是验证这一点的一种方法:

Collections.checkList(lQuery.getResultList(), Person.class);
但如果您不需要验证它:

@SuppressWarnings("unchecked") List<Person> personList = lQuery.getResultList();
@SuppressWarnings(“未选中”)List personList=lQuery.getResultList();

注意:这个答案从JPA2.0开始就过时了,它允许您指定预期的类型。请参阅。


使用

@SuppressWarnings("unchecked")
List<MyType> result = (List<MyType>) query.getResultList();

作为JPA的新来者,我将此作为最终答案,但随后我通过以下问题找到了更好的答案:

使用TypedQuery代替Query非常简单,例如:

TypedQuery<Person> lQuery = myEntityManager.createQuery("from Person", Person.class);
List<Person> personList = lQuery.getResultList();
TypedQuery lQuery=myEntityManager.createQuery(“来自Person”,Person.class);
List personList=lQuery.getResultList();

替代方法:

Query query = entityManager.createNativeQuery("SELECT * FROM person", Person.class);
List<Person> rows = query.getResultList();
Query Query=entityManager.createNativeQuery(“从person、person.class中选择*);
List rows=query.getResultList();

我没有解释我的演员阵容是如何失败的,因为它没有失败。这并不能使警告保持沉默。。所以它什么都不做。在执行(rows.get(0)instanceof Person)时。你可能会得到“假”。(对于这样的简单select语句,情况并非如此)。请转到
Query
是一种抽象类型,因此如果您确实需要,它仍然可以是
Query
。无论如何,我更喜欢一行实现:```List personList=myEntityManager.createQuery(“from Person”,Person.class).getResultList()```
TypedQuery<Person> lQuery = myEntityManager.createQuery("from Person", Person.class);
List<Person> personList = lQuery.getResultList();
Query query = entityManager.createNativeQuery("SELECT * FROM person", Person.class);
List<Person> rows = query.getResultList();