java - 删除时 SessionFactoryImpl#getReturnTypes 中的空指针异常

标签 java database hibernate nullpointerexception

此行抛出根植于 SessionFactoryImpl#getReturnTypes 方法的 NPE:

    Query q = em.createQuery("DELETE FROM Table t WHERE row = :row"), Table.class);

更具体地说,返回空值的方法是 HQLQueryPlan#getReturnMetadata(),这就是 SessionFactoryImpl#getReturnTypes 中的这条指令失败的原因:

return queryPlanCache.getHQLQueryPlan( queryString, false, CollectionHelper.EMPTY_MAP ).getReturnMetadata().getReturnTypes();

出于某种原因,该表上的选择工作正常,我记得在同一张表上也看到了删除工作,但我不知道什么地方可能丢失或更改了。我记得做的最后一件事是从表中删除所有行,但我认为这与问题无关。

知道哪里出了问题吗?

这个确实有效:

Query q = em.createNativeQuery("DELETE FROM Table t WHERE row = ?");

但我仍然不知道为什么另一个没有,正如我所说,选择工作正常。

这是堆栈跟踪:

java.lang.NullPointerException
at org.hibernate.impl.SessionFactoryImpl.getReturnTypes(SessionFactoryImpl.java:812)
at org.hibernate.impl.AbstractQueryImpl.getReturnTypes(AbstractQueryImpl.java:193)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:278)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
at $Proxy87.createQuery(Unknown Source)
at com.xyz.persistence.dao.myDAO.deleteStuff(myDao.java:652) 

最佳答案

因为您的 DELETE 查询不会返回“类型”,所以查询不会接受 resultClass 参数 Table.class

这是一个古怪的 api

关于java - 删除时 SessionFactoryImpl#getReturnTypes 中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12577554/

相关文章:

java - XStream 更改通用别名约定

java - 从网站角度学习Java的最佳途径或流程

java - 无法解析太多方法

python - 使用 Python 填充 Cassandra 数据库

php - 过去 24 小时的订单数

java.time.LocalDateTime 在带有 hibernate 的 JPA 中被持久化为tinyblob而不是 TemporalType

java - hibernate多对多防止子项删除

java - 写入 ClassPath 上的数据文件不会反射(reflect)在项目中?

java - Android SQLite SELECT 语句不执行

java - Spring 事务原子性到底意味着什么?