日期:2014-05-17  浏览次数:20830 次

哎呀我草 hibernate的那些get load 方法 太可怕了
写了一个根据id 查询 pass的方法 


/**
*获取pass
*/
        public String selectpass(String name) {
String pass = hibernatetemplate.get(User.class, getId(name)).getPass();
System.out.println(pass);
return pass;
}
        //获取id
public int getId(String name) {
int id = (Integer) hibernatetemplate.find(
"select id from User user where name='" + name + "'").get(0);
return id;
}


按说这个没啥问题吧。。

然后诡异的问题出现了 
如果密码部分 不是纯数字的字符串的话 
死活不走 代码。。
下面那个不输出了。

但是 如果是纯数字的字符串。。
则正常输入 ajax回调验证 

真心奇怪 难道get方法拿到对象只能get纯数字的字符串吗 

要真是这样的功能 我还是滚回去 用我的sql把 

hibernate的方法太口怕了

------解决方案--------------------

这代码看着别扭,好像有错,你try catch一下估计会有异常
------解决方案--------------------
hibernate很垃圾,但是也别自己脑子进水就怨Hibernate。

你下面的方法都能直接查询到user对象了,还返回个ID再查一次?

要么是下面的方法返回的ID就不对,要么是自己拼接HQL时候遇到编码或者类型转换了。
------解决方案--------------------
密码不是纯数字就不走?这应该是你前段代码的问题,跟后台没有关系吧?
------解决方案--------------------

都取到user对象了,还要再查一次

String pass = hibernatetemplate.find("from User as u where u.name='" + name + "'").get(0).getPass();
------解决方案--------------------
按照楼上说的try catch捕获一次吧。。估计是类型转换的问题。。检查下数据库跟配置对照上没?要说一个框架好不好首先得了解它。。而不是出了问题无法解决就说框架没用哦