在一个ssh demo 中 业务逻辑层 中 写的 String hql = "from Account user where user.employeeName = '"+object.getEmployeeName()+"'";调用dao层的 search() super.getHibernateTemplate().find(hql) 居然没有查询出结果, 我用sql 测试过了 数据是确实存在的, 而hql语句经过 System 输出到 console 也没有问题 看看DAO层的hql语句 : from Account user where user.employeeName = '刘总'郁闷这个super.getHibernateTemplate().find(hql) 哪里出了问题看了上面的import org.springframework.orm.hibernate3.support.HibernateDaoSupport 这个包也没问题的
解决方案 »
- jQuery Ajax进度条效果
- spring中hibernatedaosupport以及ApplicationContext问题
- tomcat 启动异常,望高手解决
- java正则表达式问题
- 请问websphere6.0 不解析displaytag 标签问题
- 急!weblogic 问题
- 请教EJB1.1和EJB2.0的区别?
- Tomcat 5.0 连接数据库SQL Server2K 出现这样的错误,求助!急!!
- jbuilder9+jboss3.2.1+oracle9i的一个问题
- 最简单的问题:JBuilder8 + Weblogic7 ,运行Jsp出的问题
- 在线等待!JDBC连接ORACLE数据库问题。
- hibernate 查询数据的问题
这句话直接放到sql里,试试能不能成功,如果能成功那就无语了
这样写是错误的
getHibernateTemplate.find("from Account user where user.employeeName =?",object.getEmployeeName());
这样就可以了
我写的那个hql 是 hql 语句 .... 怎么可能放到sql 中去执行呢?
这位朋友的方法我还没试过, 不过按照您的那种方法去写的话, 又不是我的习惯, 比较我习惯了在 Service层中 写 查询语句, 传进DAO中 .
你设置一下把sql语句打印出来,用那个sql语句去数据库里执行一下
您这方法打印出来的效果是 这样的from Account user where user.employeeName = 刘总后面的字符串没了 ''
getHibernateTemplate.find("from Account user where user.employeeName =?",object.getEmployeeName());
public boolean isLoginSuccess(Account object) {
// TODO Auto-generated method stub
String hql = "from Account ";
System.out.println("看看业务逻辑层的hql"+hql);
List list = commonDAO.search(hql);
System.out.println("业务逻辑层这边的城市"+list.size());
if(list.size() > 0){
Account item = (Account)list.get(0);
if(object.getEmployeePwd().equals(item.getEmployeePwd())){
return true ;
}
}
return false ;
}
在DAO层方法是这样的
public List search(String hql) {
// TODO Auto-generated method stub
System.out.println("看看dao层的"+hql);
List temp = super.getHibernateTemplate().find(hql);
for(int i = 0 ; i < temp.size(); i++){
Account user = (Account)temp.get(i);
System.out.println(user.getEmployeeName());
}
System.out.println("看看dao层的"+temp.size());
return temp ;
} 想用全部查询来测试是否能够成功查询出Account 表中的 数据 , 结果是可以的 业务逻辑中方法改回这样 String hql = "from Account account where account.employeeName = '"+object.getEmployeeName()+"'"; 就不行了 console 没输出数据 , list.size() 的输出结果是 0 我在ms sqlserver 的查询分析其中使用
select * from Account where EmployeeName = '刘总' 就查询出数据 自己也在dao层的方法中使用System.out.println(); 输出方法中使用 hql 语句, 都是很正常的, 会不会是hql 到了 ms sqlserver中 它的中文条件 '刘总' 被转义成了乱码 而不会从数据库中获取数据呢?
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>怎么还会出现乱码呢?
我用的是ms sqlserver 2000该怎么设置呢?
英文的我试过了 成功了 ms sqlserver 用的是utf-8么? 我的filter 使用的就是utf-8 jsp页面也是utf-8
<prop key="connection.useUnicode">true</prop>
<prop key="connection.characterEncoding">utf8</prop>
<prop key="connection.useUnicode">true</prop> 没有变化.....复制一下我使用log4j.properties 在consosle 输出的结果 :
08:56:02,046 DEBUG QueryTranslatorImpl:177 - HQL: from com.newshieldoa.common.pojo.Account account where account.employeeName = '刘总' and account.employeePwd = '.'
08:56:02,046 DEBUG QueryTranslatorImpl:178 - SQL: select account0_.EmployeeID as EmployeeID, account0_.EmployeeName as Employee2_0_, account0_.EmployeePwd as Employee3_0_, account0_.EmployeeRight as Employee4_0_, account0_.Re as Re0_ from xindunoadb.dbo.Account account0_ where account0_.EmployeeName='??×?' and account0_.EmployeePwd='.'
这你希望你说的是对的 ,但是很明显您没有仔细看过我的回复 我早就把user 改成了 account .....
按照这位说的 我在dao层 另外写了一个方法进行测试
return super.getHibernateTemplate()
.find("from Account account where account.employeeName like ?",item.getEmployeeName());dao层使用System.out.println() 输出测试了下 数据被正常查询出来了 , 但是我不习惯在dao层组织 hql 语句 , 组织的工作我想要放到Service中去 , 难道想要完成这个功能就只能在dao层组织hql 语句了么?
sessionFactory 的配置信息中 配置了这样一段代码就搞定了
<prop key="hibernate.query.factory_class">
org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</prop>快2天了 终于把这该死的问题搞定了. 做个标记 ,为自己, 为别人.
http://john521.javaeye.com/blog/517759
谢谢杯具楼主!~