Hibernate中createQuery与createSQLQuery两者的区别

最近几天在写项目,遇到了一个错:

Struts has detected an unhandled exception:
Messages:

ORA-00933: SQL ???????
could not execute query
could not execute query; SQL [ select count(*) from www.csdn.weibo.domain.Pictures where 1=1 and picture_type='aaa']; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query

File: oracle/jdbc/driver/DatabaseError.java
Line number: 112
Stacktraces
org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; SQL [ select count(*) from www.csdn.weibo.domain.Pictures where 1=1 and picture_type='aaa']; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query

在论坛发贴了,看到大家的回复我也改了改,还是没查询不到,于是乎请教老师吧,老师上来就看出问题了,唉唉,并且要我细看hibernate ,createQuery与createSQLQuery两者的区别,所以我先把我的错误展示给大家,然后再看他们的区别。

终于找到问题了 原来是把createQuery和createSQLQuery弄混了,在baseDaoImpl.java 里边我原来写的是

Java code
?
1
2
3
return Integer.valueOf((session.createSQLQuery(
" select count(*) from " + clazz.getName() + " "
+ whereSql).uniqueResult() + "" ));

在jsp中拼接sql语句中写的是
Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private String spliceSql() {
String whereSql = " where 1=1 " ;
if (user != null && user.getId() != null && ! "" .equals(user.getId())) {
whereSql += " and user_id=" + user.getId() + " " ;
}
if (pictures != null && pictures.getType() != null
&& ! "" .equals(pictures.getType())) {
whereSql += " and picture_type='" + pictures.getType() + "'" ;
}
return whereSql;
}


应该改为这样的,
Java code
?
1
2
3
4
return Integer.valueOf(session.createQuery(
"select count(alias) from " + clazz.getName()
+ " as alias " +whereSql).uniqueResult()
+ "" );



Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private String spliceSql() {
String whereSql = " where 1=1 " ;
if (user != null && user.getId() != null && ! "" .equals(user.getId())) {
whereSql += " and user_id=" + user.getId() + " " ;
}
if (pictures != null && pictures.getType() != null
&& ! "" .equals(pictures.getType())) {
whereSql += " and picture_type='" + pictures.getType() + "'" ;
}
return whereSql;
}

下面是从网上找的很有用:

createQuery与createSQLQuery区别

前者用的hql语句进行查询,后者可以用sql语句查询
前者以hibernate生成的Bean为对象装入list返回
后者则是以对象数组进行存储
所以使用createSQLQuery有时候也想以hibernate生成的Bean为对象装入list返回,就不是很方便
突然发现createSQLQuery有这样一个方法可以直接转换对象
Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class);
XXXXXXX 代表以hibernate生成的Bean的对象,也就是数据表映射出的Bean。


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值