当前位置: 首页 > 知识库问答 >
问题:

组织。冬眠QueryParameterException:位置超出已声明序数参数的数量

卢景澄
2023-03-14

登录库

@Repository
public class LoginRepository {
    @Autowired
    private HibernateTemplate hibernateTemplate;
    
    public List logDetails(Student st) {
        List list=hibernateTemplate.find("select email,password from Student where email='?' and password='?'",st.getEmail(),st.getPassword());
        return list;
    }
}

服务函数

@Service
public class LoginService {
    @Autowired
    private LoginRepository logRepo;

    public List serLogin(Student s) {
        List li = logRepo.logDetails(s);
        return li;
    }

}

登录控制器

@Controller
public class LoginController {
    @Autowired
    private LoginService logSer;

    @RequestMapping("/login")
    public String loginPage(Map<String, Object> map) {
        Student s = new Student();
        map.put("log", s);
        System.out.println("Inside Login Controller");
        return "login";
    }

    @RequestMapping(value = "/saveLog", method = RequestMethod.POST)
    public String saveLogin(@ModelAttribute("log") Student s, Map<String, Object> map) {
        List list = logSer.serLogin(s);
        if (list == null) {
            return "login";
        } else {
            map.put("log", s);
            return "home";
        }
    }
}

错误

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/SpringMVC-web] threw exception [Request processing failed; nested exception is org.springframework.orm.hibernate3.HibernateQueryException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1; nested exception is org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1] with root cause
org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1
    at org.hibernate.engine.query.ParameterMetadata.getOrdinalParameterDescriptor(ParameterMetadata.java:81)
    at org.hibernate.engine.query.ParameterMetadata.getOrdinalParameterExpectedType(ParameterMetadata.java:87)
    at org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:445)
    at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:417)
    at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:918)
    at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:912)
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:912)
    at com.pp.repository.LoginRepository.logDetails(LoginRepository.java:16)
    at com.pp.service.LoginService.serLogin(LoginService.java:17)
    at com.pp.controller.LoginController.saveLogin(LoginController.java:30)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at 

我实际上在这里检查日志记录时输入的数据是否存在于数据库中。如果数据为null,那么list将为null,并将其发送回登录到主页。有人能帮我吗?

共有1个答案

邢寒
2023-03-14

JPQL风格的位置参数使用问号声明,后跟序号-?1?2.序数以1开头。与命名参数一样,位置参数也可以在查询中出现多次。

因此,您应该以这种方式更正您的查询:

select s.email, s.password from Student s where s.email=?1 and s.password=?2
 类似资料:
  • 我使用Spring Data JPA生成了一个非常简单的查询方法,但出现以下错误: 这是我的方法: 有什么想法吗?这让我特别困扰,因为我以前写过数百个这样的查询,而这个看起来非常正常。

  • 我想执行mysql插入查询使用Hibernate,我有这个: 我发生了以下异常:, 线程“main”组织中出现异常。冬眠QueryParameterException:位置超出已声明序数参数的数量。请记住,序数参数是基于1的!职位:1 这里怎么了?

  • 我想执行我的选择查询, @查询(value=“select*from data o,其中o.id=:id”,nativeQuery=true) 公共列表查找列表(整数id); 获取非法参数异常, 位置超出已声明顺序参数的数量。请记住,序数参数是基于1的!职位:1

  • 我想使用hibernate执行本机/原始mysql查询,我有: 我得到的错误: 这里怎么了?

  • 我有一个Hibernate Web应用程序,目前正在tomcat/CloudFoundry上运行,但当我尝试在JBoss上运行它时,我遇到了一些错误。 在我的DAO中,我创建了一个查询来按用户名加载用户,如下所示: 当我在Tomcat上运行应用程序时,上面的方法是有效的,但是当我在JBoss上运行应用程序时,我得到了以下错误: 我已经尝试更改为以下两个问题,但仍然没有成功: 上面给我同样的错误。因

  • 数组要占用内存空间。程序员指定每个元素的类型和每个数组所要的元素,使编译器可以保留相应的内存空间。要告诉编译器对整型数组c保留12个元素,可以声明如下: int c[12]; 可以在一个声明中为几个数组保留内存。下列声明对整型数组 b 保留 100 个元素,对整型数组x保留27个元素: int b[100],x[27]; 数组可以声明包含其他数据类型。例如,char 类型的数组可以存放字符串。字符