Hibernate HQL在Tomcat上工作,而不是在Oracle AppServer 10.1.3上工作?

Hibernate HQL在Tomcat上工作,而不是在Oracle AppServer 10.1.3上工作?,hibernate,hql,oc4j,Hibernate,Hql,Oc4j,在Tomcat上运行应用程序时,我没有收到任何错误。在Oracle(OC4J)10.1.3上运行时,我得到以下信息: org.hibernate.hql.ast.QuerySyntaxError: unexpected end of subtree [ SELECT c, cc, pa, ta FROM com.test.CASE c LEFT OUTER JOIN c.personadmin pa LEFT OUTER JOIN c.term

在Tomcat上运行应用程序时,我没有收到任何错误。在Oracle(OC4J)10.1.3上运行时,我得到以下信息:

org.hibernate.hql.ast.QuerySyntaxError: unexpected end of subtree [   
SELECT c, cc, pa, ta      
  FROM com.test.CASE c
  LEFT OUTER JOIN c.personadmin pa           
  LEFT OUTER JOIN c.termadmin ta           
  LEFT OUTER JOIN c.caseChannel cc     
 WHERE c.case_id IN ()  
ORDER BY c.case_id, cc.caseChannelCd ]
...
Caused by: <AST>: unexpected end of subtree

很奇怪,这个错误发生在一个容器中,而不是在另一个容器中。我认为问题在于:

其中c.case_id在()


因此,这意味着它在Tomcat上也会失败。因此,我首先要验证两个容器中运行的查询是否完全相同。

很奇怪,这个错误发生在一个容器中,而不是另一个容器上。我认为问题在于:

其中c.case_id在()


因此,这意味着它在Tomcat上也会失败。因此,我首先要验证您正在运行的查询在这两个方面是否完全相同。

这是正确的,一个空in子句导致了这个问题,就在几个月前发生过这种情况。添加源代码以显示in子句是如何定义的。这个来源看起来正确吗?听起来更好,我仍然认为这不是一个与容器相关的问题。我的猜测是,
caseIdList
在OC4J中是空的,而在Tomcat中不是空的(也许这只是巧合)。因此,在执行查询之前添加调试日志记录,以打印此集合的大小,只是为了确保具有相同的查询、相同的参数、不同的服务器。这是正确的,一个空in子句会导致此问题,就在几个月前发生过这种情况。添加源代码以显示in子句的定义方式。这个来源看起来正确吗?听起来更好,我仍然认为这不是一个与容器相关的问题。我的猜测是,
caseIdList
在OC4J中是空的,而在Tomcat中不是空的(也许这只是巧合)。因此,在执行查询之前添加调试日志,以打印此集合的大小,只是为了确保您具有相同的查询、相同的参数、不同的服务器。原因是Oracle app server上的caseIdList为空,而Tomcat上的caseIdList不为空。根本原因仍在调查中,但似乎与影响Spring WS服务的两个XML库之间的差异有关。如果这对其他人有帮助,根本原因是我使用JAXB对Spring WS进行编组/解编。war缺少JAXB(xjc)与编组过程中使用的bean一起创建的package-info.java类。还有一个:package-info.java由于Ant 1.7.1(Eclipse插件)中的错误而未编译。有关更多信息,请参阅。通过触摸p-i.java文件并在所有其他源代码之前编译它们进行修复。原因是Oracle应用程序服务器上的caseIdList是空的,而Tomcat上没有。根本原因仍在调查中,但似乎与影响Spring WS服务的两个XML库之间的差异有关。如果这对其他人有帮助,根本原因是我使用JAXB对Spring WS进行编组/解编。war缺少JAXB(xjc)与编组过程中使用的bean一起创建的package-info.java类。还有一个:package-info.java由于Ant 1.7.1(Eclipse插件)中的错误而未编译。有关更多信息,请参阅。修复方法是触摸p-i.java文件并在所有其他源代码之前编译它们。
    String hql = "   SELECT c, cc, pa, ta " 
               + "     FROM CASE c " 
               + "          LEFT OUTER JOIN c.personadmin pa "
               + "          LEFT OUTER JOIN c.termadmin ta "
               + "          LEFT OUTER JOIN c.caseChannel cc "
               + "    WHERE c.case_id IN (:caseIds) "
               + " ORDER BY c.case_id, cc.caseChannelCd ";

    Query query = getSession().createQuery(hql);
    query.setParameterList("caseIds", caseIdList);
    results = query.list();