在Hibernate查询中使用“泛型”时出错

时间:2018-11-13 16:35:03

标签: java hibernate

我正在项目中使用Hibernate,并使用“查询”,如下所示。

Query query = em.createQuery("delete from User where name=:name");
query.setParameter("name", "Zigi");
int deleted = query.executeUpdate();

我得到了结果。当我使用如下所示的泛型

Query<?> query = em.createQuery("delete from User where name=:name");
query.setParameter("name", "Zigi");
int deleted = query.executeUpdate();

得到结果是因为“?”是通配符(或),它将接受任何数据类型

当我使用下面的代码时遇到一些错误(java.lang.IllegalArgumentException:无法键入更新/删除查询)。我使用Integer数据类型,因为执行时createQuery返回数字

Query<Integer> query = em.createQuery("delete from User where name=:name", Integer.class);
query.setParameter("name", "Zigi");
int deleted = query.executeUpdate();

任何建议。我必须像上面的代码一样使用具有特定数据类型的泛型。

提前感谢

1 个答案:

答案 0 :(得分:0)

很遗憾,executeUpdate不允许您使用类型化查询。

相反,您可以使用uniqueResult,并将其强制转换为所需的类型:

Query query = em.createQuery("delete from User where name=:name");
query.setParameter("name", "Zigi");
int deleted = (Integer) query.uniqueResult();

引用this answer