使用entityManager.createNativeQuery(query,foo.class)

2022-09-01 02:19:01

我想从

javax.persistence.EntityManager.createNativeQuery

为什么以下内容不正确?

entityManager.createNativeQuery("Select P.AppID From P", Integer.class);

具体来说,为什么我会得到“...未知实体:java.lang.Integer”

我是否必须创建一个实体类,其中包含一个整数字段?

谢谢


答案 1

您所做的称为投影。这时,您只返回属于一个实体的标量值。您可以使用 JPA 执行此操作。请参阅标量值

我认为在这种情况下,完全省略实体类型是可能的:

   Query query = em.createNativeQuery(  "select id from users where username = ?");  
   query.setParameter(1, "lt");  
   BigDecimal val = (BigDecimal) query.getSingleResult(); 

示例取自此处


答案 2

这不起作用,因为第二个参数应该是映射的实体,当然Integer不是一个持久类(因为它上面没有@Entity注释)。

因为您应该执行以下操作:

Query q = em.createNativeQuery("select id from users where username = :username");
q.setParameter("username", "lt");
List<BigDecimal> values = q.getResultList();

或者如果你想使用HQL,你可以做这样的事情:

Query q = em.createQuery("select new Integer(id) from users where username = :username");
q.setParameter("username", "lt");
List<Integer> values = q.getResultList();

问候。


推荐