整合SSH2时候,实现按Usernam查询时候出现了这个错误:org.hibernate.TypeMismatchException:

org.springframework.orm.hibernate3.HibernateSystemException:Providedidofthewrongtypef... org.springframework.orm.hibernate3.HibernateSystemException:
Provided id of the wrong type for class com.demo.pojo.Userinfo. Expected:
class java.lang.Integer, got class java.lang.String;
nested exception is org.hibernate.TypeMismatchException: Provided id of the wrong type for class com.demo.pojo.Userinfo. Expected: class java.lang.Integer, got class java.lang.String
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)
...........................................................................

org.hibernate.TypeMismatchException: Provided id of the wrong type for class com.demo.pojo.Userinfo. Expected: class java.lang.Integer, got class java.lang.String

产生错误的语句我也查到,但是就是不知怎么修改!
涉及的java类有:
Userinfo.java
useriinfoDAO.java
UserinfoDAOImpl.java
UserinfoService.java
UserinfoServiceImpl.java
LoginAction.java

错误产生就在UserinfoDAOImpl.java中的:
Userinfo userinfo =(Userinfo)this.getHibernateTemplate().get(Userinfo.class, username);

LoginAction.java调用:
Userinfo userinfo = this.userinfoService.login(username, password);

然后UserinfoServiceImpl.java 调用:
Userinfo userinfo = this.userinfoDAO.findUserinfoByName(username);

然后UserinfoDAOImpl.java有这个语句:
Userinfo userinfo =(Userinfo)this.getHibernateTemplate().get(Userinfo.class, username);

即:
@Override
public Userinfo findUserinfoByName(String username) throws Exception {

Userinfo userinfo =(Userinfo)this.getHibernateTemplate().get(Userinfo.class, username);

return userinfo;
}

就是那个语句,通过Hibernate取出来的数据类型都是String,但是Userinfo.java有
Integer id;
String username;
String password;
String role;

知道
Userinfo userinfo =(Userinfo)this.getHibernateTemplate().get(Userinfo.class, username);

期待的class类型为Integer:Expected: class java.lang.Integer
但是却得了String类型:got class java.lang.String

我接触这个时间不长,请问有什么方法可以解决这个问题呢?
问题解决了,PS一下吧,供参考
Userinfo userinfo =(Userinfo)this.getHibernateTemplate().get(Userinfo.class, username);
这个语句就错在get哪里,Hibernate一般是以Id查询,就是username哪里是Integer类型。如果想按照username查询,那么就修改成如下的:

String hql = "select userinfo from Userinfo userinfo where userinfo.username='"+username+"'";
List list =this.getHibernateTemplate().find(hql);

if(list.size()==0){//判断是否有查询结果
return null;

}else{
Userinfo userinfo=(Userinfo) list.get(0); //返回查询结果
return userinfo;
}
展开
 我来答
_缘如此
2011-07-14 · TA获得超过133个赞
知道小有建树答主
回答量:311
采纳率:0%
帮助的人:182万
展开全部
没人说hibernate查出来的都是String型的吧,你在配置文件中配置一下类型咯,又或是你数据库里面的id本来存储的就是String型的数据,可能是Integer不兼容得啊,不会有中文或者非数字的东东吧
long_tony
2011-07-13 · TA获得超过176个赞
知道答主
回答量:150
采纳率:0%
帮助的人:74.5万
展开全部
类型转换错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式