私は非常に奇妙な問題を抱えています。Postgres9.1でHibernate4.1.7を使用しています。私のエンティティクラスでは、アノテーションを使用してフィルターを定義しました。
@FilterDef(name = "filterName", parameters=@ParamDef(name="paramInt", type="integer" ))
次に、@Filterをコレクションに追加しました。フィルタがこのように定義されている場合:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "linkField")
@Filter(name = "filterName", condition = "fieldVal=0")
private Collection<ChildClass> children;
すべてが適切に機能し、コレクションは適切にフィルタリングされ、fieldValが0の子のみが表示されます。一方、次の場合は次のようになります。
@OneToMany(cascade = CascadeType.ALL, mappedBy = "linkField")
@Filter(name = "filterName", condition = "fieldVal=:paramInt")
private Collection<ChildClass> children;
コードでパラメーターを設定すると、「フィルター」が適切に設定されます(デバッガーで検査します)が、コレクションにアクセスすると、次の例外が発生します。
java.lang.NullPointerException:
at org.hibernate.engine.spi.QueryParameters.processFilters(QueryParameters.java:492)
at org.hibernate.engine.spi.QueryParameters.processFilters(QueryParameters.java:462)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1688)
at org.hibernate.loader.Loader.doQuery(Loader.java:832)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:293)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:263)
at org.hibernate.loader.Loader.loadCollection(Loader.java:2094)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:61)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:678)
at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:82)
at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1801)
at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:524)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:212)
at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:520)
at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:125)
at org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:152)
at org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:139)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:212)
at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:138)
at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:242)
私はアイデアがありません。何日もの間それが何であるかを理解しようとしていて、どこでも無駄に検索しました。誰かが何ができるかについての手がかりを持っていますか?
ありがとう!
Edited: made more clear when the exception was raised