论坛首页 Java企业应用论坛

关于hibernate的分表查询问题

浏览 6863 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-10-23  
sgip_mt_log 这个表 由于数据量大,需要每个月进行分表
如 sgip_mt_log_200610,sgip_mt_log_200609 等
映射的对象只是sgip_mt_log 这个表

在看了以前robbin的一个解答 

http://www.iteye.com/topic/8576

现在在hibernate3  中可以写成这样

String sql = "select {sgip_mt_log.*} from sgip_mt_log_200610 {sgip_mt_log} order by {sgip_mt_log.MTID}";
query=session.createSQLQuery(sql).addEntity("sgip_mt_log",MTMsg.class);


一点问题都没有 但是如果把 order by 该为 where

String sql = "select {sgip_mt_log.*} from sgip_mt_log_200610 {sgip_mt_log} where {sgip_mt_log.MTID}=1"; 


就会报错误 ORA-00904: "MT1_0_": 无效的标识符

为什么同样的字段在order by 中就没有问题 而在where的时候就找不到别名哪
应该怎么解决哪 ?
   发表时间:2006-10-23  
String sql = "select {sgip_mt_log.*} from sgip_mt_log_200610 {sgip_mt_log} where {sgip_mt_log}.MTID=1";
这样写就可以的。

至于为什么会出错?原因在于,hibernate解析出的sql语句中,会自动为表中的列加上别名,如id会变为id0_0_。
可以使用生成后的别名来进行order by排序,
但并不能使用别名来进行where条件处理,参与条件运算的必须是实际的列名,而不能是别名。


0 请登录后投票
   发表时间:2006-10-23  
郁闷了 一天了谢谢
0 请登录后投票
   发表时间:2006-10-23  
如果 查询count又应该如果查询哪?
0 请登录后投票
   发表时间:2007-07-11  
count 查询
  s.createSQLQuery("select count( * ) as count from sgip_mt_log_200610 ").addScalar("count", Hibernate.INTEGER).uniqueResult()
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics