views:

273

answers:

1

I've got a hibernate query I'm trying to get working but keep getting an exception with a not so helpful stack trace. I'm including the code, the stack trace, and hibernate chatter before the exception is thrown. If you need me to include the entity classes for MessageTarget and GrpExclusion let me know in comments and I'll add them.

public List<MessageTarget> findMessageTargets(int age, String gender, String businessCode, String groupId, String systemCode) {
    Session session = getHibernateTemplate().getSessionFactory().openSession();
    List<MessageTarget> results = new ArrayList<MessageTarget>();
    try {
        String hSql = "from MessageTarget mt where " +
                        "not exists (select GrpExclusion where grp_no = ?) and " +
                        "(trgt_gndr_cd = 'A' or trgt_gndr_cd = ?) and " +
                        "sys_src_cd = ? and " +
                        "bampi_busn_sgmnt_cd = ? and " +
                        "trgt_low_age <= ? and " +
                        "trgt_high_age >= ? and " +
                        "(effectiveDate is null or effectiveDate <= ?) and " +
                        "(termDate is null or termDate >= ?)";

        results = session.createQuery(hSql)
                                        .setParameter(0, groupId)
                                        .setParameter(1, gender)
                                        .setParameter(2, systemCode)
                                        .setParameter(3, businessCode)
                                        .setParameter(4, age)
                                        .setParameter(5, age)
                                        .setParameter(6, new Date())
                                        .setParameter(7, new Date())
                                        .list();
    } catch (Exception e) {
        System.err.println(e.getMessage());
        e.printStackTrace();

    } finally {
      session.close();
    }
    return results;
}

Here's the stacktrace.

[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R java.lang.NullPointerException
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.ast.util.SessionFactoryHelper.findSQLFunction(SessionFactoryHelper.java:365)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.ast.tree.IdentNode.getDataType(IdentNode.java:289)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:165)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:831)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:619)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:672)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.collectionFunctionOrSubselect(HqlSqlBaseWalker.java:4465)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4165)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1864)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1839)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1789)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1789)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1789)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1789)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1789)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1789)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1789)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:818)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:604)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:288)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
[5/6/10 15:05:21:041 EDT] 00000017 SystemErr     R  at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.bcbst.bamp.ws.dao.MessageTargetDAOImpl.findMessageTargets(MessageTargetDAOImpl.java:30)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.bcbst.bamp.ws.common.AlertReminder.findMessageTargets(AlertReminder.java:22)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at java.lang.reflect.Method.invoke(Method.java:599)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at org.apache.axis2.jaxws.server.dispatcher.JavaDispatcher.invokeTargetOperation(JavaDispatcher.java:81)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at org.apache.axis2.jaxws.server.dispatcher.JavaBeanDispatcher.invoke(JavaBeanDispatcher.java:98)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at org.apache.axis2.jaxws.server.EndpointController.invoke(EndpointController.java:109)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at org.apache.axis2.jaxws.server.JAXWSMessageReceiver.receive(JAXWSMessageReceiver.java:159)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:188)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.websvcs.transport.http.WASAxis2Servlet.doPost(WASAxis2Servlet.java:1389)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1536)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:829)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:458)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:175)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3742)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:929)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:178)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:272)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
[5/6/10 15:05:21:057 EDT] 00000017 SystemErr     R  at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550)

Here's the hibernate chatter.

[5/6/10 15:05:20:651 EDT] 00000017 XmlBeanDefini I org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions Loading XML bean definitions from class path resource [beans.xml]
[5/6/10 15:05:20:823 EDT] 00000017 Configuration I org.slf4j.impl.JCLLoggerAdapter info configuring from url: file:/C:/workspaces/bampi/AlertReminderWS/WebContent/WEB-INF/classes/hibernate.cfg.xml
[5/6/10 15:05:20:838 EDT] 00000017 Configuration I org.slf4j.impl.JCLLoggerAdapter info Configured SessionFactory: java:hibernate/Alert/SessionFactory1.0.3
[5/6/10 15:05:20:838 EDT] 00000017 AnnotationBin I org.hibernate.cfg.AnnotationBinder bindClass Binding entity from annotated class: com.bcbst.bamp.ws.model.MessageTarget
[5/6/10 15:05:20:838 EDT] 00000017 EntityBinder  I org.hibernate.cfg.annotations.EntityBinder bindTable Bind entity com.bcbst.bamp.ws.model.MessageTarget on table MessageTarget
[5/6/10 15:05:20:854 EDT] 00000017 AnnotationBin I org.hibernate.cfg.AnnotationBinder bindClass Binding entity from annotated class: com.bcbst.bamp.ws.model.GrpExclusion
[5/6/10 15:05:20:854 EDT] 00000017 EntityBinder  I org.hibernate.cfg.annotations.EntityBinder bindTable Bind entity com.bcbst.bamp.ws.model.GrpExclusion on table GrpExclusion
[5/6/10 15:05:20:854 EDT] 00000017 CollectionBin I org.hibernate.cfg.annotations.CollectionBinder bindOneToManySecondPass Mapping collection: com.bcbst.bamp.ws.model.MessageTarget.exclusions -> GrpExclusion
[5/6/10 15:05:20:885 EDT] 00000017 AnnotationSes I org.springframework.orm.hibernate3.LocalSessionFactoryBean buildSessionFactory Building new Hibernate SessionFactory
[5/6/10 15:05:20:901 EDT] 00000017 ConnectionPro I org.slf4j.impl.JCLLoggerAdapter info Initializing connection provider: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider
[5/6/10 15:05:20:901 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info RDBMS: Microsoft SQL Server, version: 9.00.4035
[5/6/10 15:05:20:901 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info JDBC driver: Microsoft SQL Server 2005 JDBC Driver, version: 1.2.2828.100
[5/6/10 15:05:20:901 EDT] 00000017 Dialect       I org.slf4j.impl.JCLLoggerAdapter info Using dialect: org.hibernate.dialect.SQLServerDialect
[5/6/10 15:05:20:916 EDT] 00000017 TransactionFa I org.slf4j.impl.JCLLoggerAdapter info Transaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory
[5/6/10 15:05:20:916 EDT] 00000017 TransactionMa I org.slf4j.impl.JCLLoggerAdapter info No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
[5/6/10 15:05:20:916 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Automatic flush during beforeCompletion(): disabled
[5/6/10 15:05:20:916 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Automatic session close at end of transaction: disabled
[5/6/10 15:05:20:916 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Scrollable result sets: enabled
[5/6/10 15:05:20:916 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info JDBC3 getGeneratedKeys(): enabled
[5/6/10 15:05:20:916 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Connection release mode: auto
[5/6/10 15:05:20:916 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Default batch fetch size: 1
[5/6/10 15:05:20:916 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Generate SQL with comments: disabled
[5/6/10 15:05:20:916 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Order SQL updates by primary key: disabled
[5/6/10 15:05:20:932 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Order SQL inserts for batching: disabled
[5/6/10 15:05:20:932 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
[5/6/10 15:05:20:932 EDT] 00000017 ASTQueryTrans I org.slf4j.impl.JCLLoggerAdapter info Using ASTQueryTranslatorFactory
[5/6/10 15:05:20:932 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Query language substitutions: {}
[5/6/10 15:05:20:932 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info JPA-QL strict compliance: disabled
[5/6/10 15:05:20:932 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Second-level cache: enabled
[5/6/10 15:05:20:932 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Query cache: disabled
[5/6/10 15:05:20:932 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Cache region factory : org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge
[5/6/10 15:05:20:932 EDT] 00000017 RegionFactory I org.slf4j.impl.JCLLoggerAdapter info Cache provider: org.hibernate.cache.NoCacheProvider
[5/6/10 15:05:20:948 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Optimize cache for minimal puts: disabled
[5/6/10 15:05:20:948 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Structured second-level cache entries: disabled
[5/6/10 15:05:20:948 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Statistics: disabled
[5/6/10 15:05:20:948 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Deleted entity synthetic identifier rollback: disabled
[5/6/10 15:05:20:948 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Default entity-mode: pojo
[5/6/10 15:05:20:948 EDT] 00000017 SettingsFacto I org.slf4j.impl.JCLLoggerAdapter info Named query checking : enabled
[5/6/10 15:05:20:979 EDT] 00000017 SessionFactor I org.slf4j.impl.JCLLoggerAdapter info building session factory
[5/6/10 15:05:21:010 EDT] 00000017 SessionFactor I org.slf4j.impl.JCLLoggerAdapter info Factory name: java:hibernate/Alert/SessionFactory1.0.3
[5/6/10 15:05:21:010 EDT] 00000017 NamingHelper  I org.slf4j.impl.JCLLoggerAdapter info JNDI InitialContext properties:{}
[5/6/10 15:05:21:010 EDT] 00000017 NamingHelper  I org.slf4j.impl.JCLLoggerAdapter info Creating subcontext: java:hibernate
[5/6/10 15:05:21:010 EDT] 00000017 NamingHelper  I org.slf4j.impl.JCLLoggerAdapter info Creating subcontext: Alert
[5/6/10 15:05:21:010 EDT] 00000017 SessionFactor I org.slf4j.impl.JCLLoggerAdapter info Bound factory to JNDI name: java:hibernate/Alert/SessionFactory1.0.3
[5/6/10 15:05:21:026 EDT] 00000017 SessionFactor W org.slf4j.impl.JCLLoggerAdapter warn InitialContext did not implement EventContext
[5/6/10 15:05:21:041 EDT] 00000017 PARSER        E org.slf4j.impl.JCLLoggerAdapter error <AST>:0:0: unexpected end of subtree
+1  A: 

You are not writing your HQL properly. I would recommend reading the HQL chapter from the documentation.

There are a few things I see wrong off with your query:

  1. Your subselect is not a valid HQL query. Something like (from GroupExclusion ge where groupNumber = ?) would probably be closer to what you want.
  2. Column names should match their Java getter names and not the database column names.
  3. You should close your HibernateSession in a finally block:

    Session session = getHibernateTemplate().getSessionFactory().openSession(); try { ... } finally { session.close(); }

Eric Hauser
yeah, i've been reading the HQL docs to get some help on writing this. I've just started using Hibernate this week, so I'm on that learning curve. I have written SQL and JPQL before...so i'm not totally out of it. thanks!
dharga
yeah, the session.close() has been moved, the post just didn't reflect it...i'll update the post
dharga
duh! i knew about using "select"...thanks for seeing what i was overlooking!
dharga