Gui*_*Sim 31 java persistence hibernate casting
嘿大家,我是新手,坚持/休眠,我需要你的帮助.
这是情况.我有一张包含一些东西的表.我们称他们为人.我想从数据库中获取该表中的所有条目.
我有一个Person类,它是一个简单的POJO,表中的每一列都有一个属性(name,age,..)
这就是我所拥有的:
Query lQuery = myEntityManager.createQuery("from Person")
List<Person> personList = lQuery.getResultList();
Run Code Online (Sandbox Code Playgroud)
但是,我得到一个警告,说这是一个未经检查的转换,从List
以List<Person>
我认为只需将代码更改为
Query lQuery = myEntityManager.createQuery("from Person")
List<Person> personList = (List<Person>)lQuery.getResultList();
Run Code Online (Sandbox Code Playgroud)
会工作..但它没有.
有没有办法做到这一点 ?持久性是否允许我设置查询的返回类型?(通过泛型可能吗?)
Bru*_*ams 70
作为JPA的新手,这是一个明确的答案,但后来我通过这个问题找到了一个更好的答案:为什么在JPA EntityManager查询中抛出NoResultException但是却找不到?
它就像使用TypedQuery而不是Query一样简单,例如:
TypedQuery<Person> lQuery = myEntityManager.createQuery("from Person", Person.class);
List<Person> personList = lQuery.getResultList();
Run Code Online (Sandbox Code Playgroud)
注意:此答案从JPA 2.0开始已过时,它允许您指定预期的类型.看到这个答案.
抑制警告
@SuppressWarnings("unchecked")
List<MyType> result = (List<MyType>) query.getResultList();
Run Code Online (Sandbox Code Playgroud)
是我见过的这个问题的唯一解决方案.抑制是丑陋的,但您可以信任JPA返回正确类型的对象,因此无需手动检查.
如果您使用多态并且不知道确切的结果类型,则使用带有限Class
参数的泛型也是一种常见模式:
public List<T extends MyBaseType> findMyType(Class<T> type) {
@SuppressWarnings("unchecked")
List<T> result = (List<T>) this.entityManager.createQuery(
"FROM " + type.getName())
.getResultList();
return result;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
39548 次 |
最近记录: |