1

SessionFactoryImpl#getReturnTypesこの行は、メソッドをルートとする NPE をスローします。

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

より具体的には、null 値を返すメソッドは です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) 
4

2 に答える 2

4

DELETE クエリは「タイプ」を返さないため、クエリは resultClass パラメータ、Table.class を受け入れません。

その変なAPI

于 2013-02-04T02:02:18.503 に答える
0

ドメイン オブジェクトを確認してくださいTable。Hibernate はそのオブジェクトのメタデータを回復できないため、そこに問題がある可能性があります。JPA を使用している場合は、persistence.xmlファイルをチェックして、ドメイン オブジェクトが含まれていることを確認してください。

于 2012-09-26T08:38:56.077 に答える