2012-09-24 4 views
2

@Lob 필드에서 검색어를 검색하는 중 이상한 동작이 나타납니다.@Lob 필드에서 IndexOutOfBound 검색

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 버그입니까?

편집 : 나는 PU 대신 HSQLDB의 MySQL을 사용하도록 변경, 그리고 ... 보스 것처럼 NPE는 Hibernate의 StandardSQLExceptionConverter 내에서 발생

답변

1

작동합니다. 작년에 비슷한 NPE가 발견되어보고되었습니다. 데이터베이스에 의해 변환이 불가능할 때, Hibernate에 의한 에러보고가 망가져 NPE가 발생하는 경우가 있습니다.

가장 좋은 방법은 LOB 대신 큰 VARCHAR 필드를 사용하는 것입니다.

+0

흠, 흥미로운, 그 일을하는 가장 좋은 방법은 무엇입니까? – caarlos0

관련 문제