【问题标题】:org.hibernate.QueryParameterException: Position beyond number of declared ordinal parametersorg.hibernate.QueryParameterException:超出声明序数参数数量的位置
【发布时间】:2021-02-03 06:32:41
【问题描述】:

登录库

@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,那么列表将是null,它会返回登录否则到主页。 谁能帮帮我。

【问题讨论】:

  • 不确定这是否可行,但我没有使用单引号 '' ?...尝试删除那个

标签: hibernate spring-mvc repository


【解决方案1】:

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

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

select s.email, s.password from Student s where s.email=?1 and s.password=?2

【讨论】:

    猜你喜欢
    • 2012-01-18
    • 1970-01-01
    • 2012-10-16
    • 2015-07-18
    • 1970-01-01
    • 2015-01-28
    • 2017-01-26
    • 2022-09-27
    相关资源
    最近更新 更多