小弟现在在做一个hibernate的子查询,代码如下:
DetachedCriteria memDc = DetachedCriteria.forClass(Mem.class);
memDc.add(Restrictions.eq("memName", memName)).add(
Restrictions.eq("certTyp", certTyp)).add(
Restrictions.eq("certId", certId));

DetachedCriteria acctDc = DetachedCriteria.forClass(Acct.class);
acctDc.add(Property.forName("memId").eq(memDc)).add(
Restrictions.eq("typeId", typeId));
List list = this.getHibernateTemplate().findByCriteria(acctDc);
如果不加红色字的部分,查询就是正常的,但如果加了红色字的部分,就会报以下错误:
java.lang.NullPointerException
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getProjectedTypes(CriteriaQueryTranslator.java:300)
at org.hibernate.criterion.SubqueryExpression.toSqlString(SubqueryExpression.java:56)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:316)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:86)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:67)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1531)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:298)
at org.springframework.orm.hibernate3.HibernateTemplate$37.doInHibernate(HibernateTemplate.java:988)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at org.springframework.orm.hibernate3.HibernateTemplate.findByCriteria(HibernateTemplate.java:978)
at org.springframework.orm.hibernate3.HibernateTemplate.findByCriteria(HibernateTemplate.java:971)
at cn.ccb.ebbs.common.dao.impl.AuditMissionDAOImpl.getmemBoBywhere(AuditMissionDAOImpl.java:595)
at cn.ccb.ebbs.testmodel.junit.test.Parameter_DAO_Test_NF.test(Parameter_DAO_Test_NF.java:23)
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:324)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
我试着把红字部分改成.add(Subqueries.propertyEq("memId", memDc))可是还是抱一样的错误请问原因是什么呀?在线等,谢谢!!

解决方案 »

  1.   

    to dracularking:大哥,hibernate框架报的我看不懂呀~~~
      

  2.   

    从以下2个方面着手吧
    1、有可能错误数据引起的,把数据都干掉,加一个正确的进去试下
    2、数据库表和java的映射出问题,也是如上操作,然后对于字段的映射一个一个的校对
      

  3.   

    因该是你的memDc没有setProjectionHibernate不知道你的memID与memDc的那一个column做eq比较
    ".add(Property.forName("memId").eq(memDc))"