Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Hibernate应用程序移动到JBoss-位置超出已声明顺序参数的数量_Java_Hibernate_Jboss - Fatal编程技术网

Java 将Hibernate应用程序移动到JBoss-位置超出已声明顺序参数的数量

Java 将Hibernate应用程序移动到JBoss-位置超出已声明顺序参数的数量,java,hibernate,jboss,Java,Hibernate,Jboss,我有一个Hibernate web应用程序,目前正在tomcat/CloudFoundry上运行,但是当我尝试在JBoss上运行它时,我遇到了一些错误 在我的DAO中,我创建了一个查询以按用户名加载用户,如下所示: Query query = getEntityManager().createQuery("select u from com.tmm.enterprise.socialcv.security.Account u where u.userName = ?1"); query.setP

我有一个Hibernate web应用程序,目前正在tomcat/CloudFoundry上运行,但是当我尝试在JBoss上运行它时,我遇到了一些错误

在我的DAO中,我创建了一个查询以按用户名加载用户,如下所示:

Query query = getEntityManager().createQuery("select u from com.tmm.enterprise.socialcv.security.Account u where u.userName = ?1");
query.setParameter(1, userName);
当我在Tomcat上运行应用程序时,上面的方法是有效的,但是当我在JBoss上运行应用程序时,我得到以下错误:

16:31:47,639 DEBUG [org.springframework.web.servlet.DispatcherServlet] (http-localhost-127.0.0.1-8080-1) Handler execution resulted in exception - forwarding to resolved error view: ModelAndView: reference to view with name 'dataAccessFailure'; model is {exception=org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1; nested exception is java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1}: org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1; nested exception is java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1
    at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:301) [org.springframework.orm-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect.ajc$afterThrowing$org_springframework_orm_jpa_aspectj_JpaExceptionTranslatorAspect$1$18a1ac9(JpaExceptionTranslatorAspect.aj:15) [spring-aspects-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at com.tmm.enterprise.socialcv.security.dao.AccountDAO.loadAccountByUserName(AccountDAO.java:28) [classes:]
    at com.tmm.enterprise.socialcv.service.AccountService.loadAccountByUserName(AccountService.java:48) [classes:]
    at com.tmm.enterprise.socialcv.service.AccountService.setCredentials(AccountService.java:241) [classes:]
    at com.tmm.enterprise.socialcv.controller.HomeController.signup(HomeController.java:59) [classes:]
    ...
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1
    at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:446) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:67) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    ... 80 more
Caused by: org.hibernate.QueryParameterException: ***Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1***
    at org.hibernate.engine.query.spi.ParameterMetadata.getOrdinalParameterDescriptor(ParameterMetadata.java:80) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.engine.query.spi.ParameterMetadata.getOrdinalParameterExpectedType(ParameterMetadata.java:86) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.internal.AbstractQueryImpl.determineType(AbstractQueryImpl.java:444) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:416) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:440) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    ... 81 more
我已尝试更改为以下两个查询,但仍然没有成功:

Query query = getEntityManager().createQuery("select u from com.tmm.enterprise.socialcv.security.Account u where u.userName = ?");
        query.setParameter(0, userName);
上面给了我同样的错误。还有:

Query query = getEntityManager().createQuery("select u from com.tmm.enterprise.socialcv.security.Account u where u.userName = ?");
        query.setParameter(1, userName);
切换到命名参数会导致无法定位命名参数的错误


有什么想法吗?(顺便说一句,我还必须在JBoss上的查询中将DAO更新为完全限定的帐户-在tomcat上,它只是在查询帐户)

基于Hibernate HQL,如果使用JDBC位置样式,则只需使用
。如果您使用的是命名参数,那么应该使用
:paramName

我用这种方式修复了这样的错误

schema.table = ' ?' ->error

schema.table = '?' ->no error

也许这对某人有帮助。

即使在我的情况下,什么都不起作用,我也试过了

query = getEntityManager().createQuery(
"select u from com.tmm.enterprise.socialcv.security.Account u where u.userName = :userName");
query.setParameter("userName", userName);
  • 索引为0的位置参数
  • 索引为1的位置参数
  • 命名参数
  • 最后,我发现每次调用
    setParameter()
    时,结果查询对象的参数列表都是空的,这导致了错误


    解决方案:
    persistence.xml
    文件中缺少实体映射,添加后,它开始工作

    是的,根据我原始问题中的第二个和第三个代码示例,我尝试了使用“?”方法和“?”索引”方法-这两种方法都不起作用。我还使用了命名参数:paramName,这也给出了一个错误。