Java entityManager.createNativeQuery不返回类型化结果
我需要使用entityManager选择本机查询。我找到了一个方法: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仍然强调了一个警告: 那么,为什么存在这种方法呢?我该怎么做才能修复
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需要第二个参数来理解哪个实体映射。但目前尚不清楚为什么仍然不可能生成键入的结果。我不想取消显示警告。我也可以离开。让它突出显示。我只是想知道为什么还没有决定。