Java entityManager.createNativeQuery不返回类型化结果

Java entityManager.createNativeQuery不返回类型化结果,java,jpa,entitymanager,Java,Jpa,Entitymanager,我需要使用entityManager选择本机查询。我找到了一个方法: public Query createNativeQuery(String sqlString, Class resultClass); 并尝试使用它: Query query = em.createNativeQuery(readyQuery, SmevMessage.class); return query.getResultList(); 但IDE仍然强调了一个警告: 那么,为什么存在这种方法呢?我该怎么做才能修复

我需要使用entityManager选择本机查询。我找到了一个方法:

public Query createNativeQuery(String sqlString, Class resultClass);
并尝试使用它:

Query query = em.createNativeQuery(readyQuery, SmevMessage.class);
return query.getResultList();
但IDE仍然强调了一个警告:


那么,为什么存在这种方法呢?我该怎么做才能修复它呢?

您收到了哪条警告?IDE是否只警告您返回的
列表的未经检查的转换

你可以忽略这一点。不幸的是,
createNativeQuery
方法返回一个非类型化的
Query
。你无法修复那个警告。如果它确实困扰您,您可以使用
@SuppressWarnings(“unchecked”)
来抑制它


请注意,正如我所解释的,您需要提供一个实体类作为
resultClass
参数的值。因此,在您的情况下,
SmevMessage
必须是一个实体。如果要将查询结果映射到DTO,则需要。

这是一个警告,而不是错误。您无法修复它,因为这里的API不一致。
查询
不可用。如果查看
createQuery
方法(对于JPQL),它将返回
TypedQuery
,而这个方法没有返回。您可以通过使用
@SuppressWarning
注释来隐藏警告,但您只能这样做。是的,当我使用
TypedQuery q=em.createQuery()
时,没有警告。但是方法不同
publicquerycreatenativequery(stringsqlstring)
公共查询createNativeQuery(字符串sqlString,类resultClass)?-
resultClass
似乎暗示我应该按规定获取类型
createQuery
用于JPQL。。。我提到它是为了强调
EntityManager
的API中的不一致性。如果调用
getSingleResult
getResultList
方法,持久性提供程序将实例化所提供的
resultClass
的托管实体对象并返回它们。但正如我在下面的回答中所解释的,该方法只返回一个非类型的
查询
。这就是为什么你的IDE会显示一个警告,你可以忽略它。JPA需要第二个参数来理解哪个实体映射。但目前尚不清楚为什么仍然不可能生成键入的结果。我不想取消显示警告。我也可以离开。让它突出显示。我只是想知道为什么还没有决定。