2

フィールドで検索クエリを実行しているときに、奇妙な動作が発生し@Lobます。

JPA2でHSQLDBとHibernateを使用しています。

クエリは次のとおりです: @NamedQuery(name = "URL.findByPathAndDomain", query = "select u from URL u where u.path = :path and u.domain.domain = :domain")(pathちなみに、は @lob フィールドです)。

そして、次のようにDAOでメソッドを実装しました:

public URL findByPathAndDomain(String path, String domain) {
        URL url = null;
        TypedQuery<URL> query = em().createNamedQuery("URL.findByPathAndDomain", URL.class);
        query.setParameter("path", path);
        query.setParameter("domain", domain);
        try {
            url = query.getSingleResult();
        } catch (NoResultException e) {
            logger.error(e.getMessage());
        }
        return url;
    }

そして、私はこの例外を受けています:

Caused by: org.hibernate.exception.GenericJDBCException: java.lang.NullPointerException java.lang.NullPointerException
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
    at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129)
    at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
    at $Proxy45.executeQuery(Unknown Source)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1897)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1698)
    at org.hibernate.loader.Loader.doQuery(Loader.java:832)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:293)
    at org.hibernate.loader.Loader.doList(Loader.java:2382)
    at org.hibernate.loader.Loader.doList(Loader.java:2368)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2198)
    at org.hibernate.loader.Loader.list(Loader.java:2193)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:470)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1248)
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
    at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:285)
    ... 10 more

@Lob注釈を削除すると、すべてうまくいきます。それは HSQLDB のバグですか、Hibernate のバグですか、それとも何ですか?

編集: HSQLDB の代わりに MySQL を使用するように PU を変更すると、ボスのように動作します...

4

1 に答える 1

1

NPEは、HibernateのStandardSQLExceptionConverter内で発生します。同様のNPEが昨年発見され、報告されました。場合によっては、データベースで変換ができなかったときに、Hibernateによるエラーの報告が壊れて、NPEが発生したことを思い出します。

最善のアクションは、LOBの代わりに大きなVARCHARフィールドを使用することです。

于 2012-09-24T14:04:10.117 に答える