问题描述
登录存储库
@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
,并且它会发送回登录其他主页。
任何人都可以帮助我。
解决方法
JPQL 样式的 positional parameters 使用问号后跟序数 - ?1
、?2
来声明。 序数以 1 开头。与命名参数一样,位置参数也可以在查询中多次出现。
因此,您应该以这种方式更正您的查询:
select s.email,s.password from Student s where s.email=?1 and s.password=?2