hibernate下的hql语句太长,如何修改

fly2749 2009-03-02 10:06:19
getManagerHql =
select m.customID, u.userName from CstCustomManager m, SysUser
u where m.userID = u.ID and m.customID in (1207, 1208, 1209, 1210, 1211, 1212,
1213, 1214, 1215, 454, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225,
1226, 1227, 1228, 1229, 1216, 8012, 1230, 1231, 1232, 1233, 1234, 1235, 1236,
1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249,
1250, 1251, 1252, 1253, 1254, 1255, 1260, 1261, 1262, 1263, 1264, 1265, 1266,
1267, 1268, 1269, 1256, 1257, 1258, 1259.......); (....后面很长很长)
使用getHibernateTemplate().find(getManagerHql)查询时抛异常

严重: Servlet.service() for servlet default threw exception
com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -101, SQLSTATE: 54001, SQLERRMC: null
at com.ibm.db2.jcc.c.fg.e(fg.java:1596)
at com.ibm.db2.jcc.c.fg.a(fg.java:1206)
at com.ibm.db2.jcc.b.gb.g(gb.java:140)
at com.ibm.db2.jcc.b.gb.a(gb.java:39)
at com.ibm.db2.jcc.b.w.a(w.java:34)
at com.ibm.db2.jcc.b.vb.g(vb.java:139)
at com.ibm.db2.jcc.c.fg.n(fg.java:1177)
at com.ibm.db2.jcc.c.gg.eb(gg.java:1862)
at com.ibm.db2.jcc.c.gg.d(gg.java:2295)
at com.ibm.db2.jcc.c.gg.V(gg.java:424)


急求高手,谢谢。
...全文
462 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly2749 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Mr_Bean 的回复:]
语句太长太复杂 可以适当考虑提升语句堆(statement heap) 参数大小
或者简化语句~
[/Quote]
增加了in中的参数限制,可以了,本人对db2不熟,还是问的别人,不过这样性能很差
多谢各位的回帖
zwbhanye 2009-03-09
  • 打赏
  • 举报
回复
大数据量就容易体现出来了。
zwbhanye 2009-03-09
  • 打赏
  • 举报
回复
in (1207, 1208, 1209, 1210, 1211, 1212,
1213, 1214, 1215, 454, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225,
1226, 1227, 1228, 1229, 1216, 8012, 1230, 1231, 1232, 1233, 1234, 1235, 1236,
1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249,
1250, 1251, 1252, 1253, 1254, 1255, 1260, 1261, 1262, 1263, 1264, 1265, 1266,
1267, 1268, 1269, 1256, 1257, 1258, 1259.......)

不觉得IN这么多速度很慢吗?
最好建张新的表,然后用INNER JOIN。
fly2749 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liyan93834183 的回复:]
是不是连续的,如果是连续的可以用between and
[/Quote]

.......部分都是数字,怎么用between and ,他们不是连续的
liyan93834183 2009-03-02
  • 打赏
  • 举报
回复
是不是连续的,如果是连续的可以用between and
fly2749 2009-03-02
  • 打赏
  • 举报
回复
这里面的数据虽然大多数都是连续的,可是有部分是没有规律的,我没有全部贴出来,
比如:6331, 6332, 88, 106, 126, 127,
128, 129, 206, 130, 131, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
173, 174, 175, 187, 226, 246, 286,
他是用substring截的数字数组,要是就坚持用这种方法,可以么?我在另一个版本上看到这个查询可以查出来,但是看不到代码,那个查询非常的慢,可能就是语句太长这个原因。
Mr_Bean 2009-03-02
  • 打赏
  • 举报
回复
语句太长太复杂 可以适当考虑提升语句堆(statement heap) 参数大小
或者简化语句~
liyan93834183 2009-03-02
  • 打赏
  • 举报
回复
SQLCODE: -101, SQLSTATE: 54001
错误含义:SQL语句超出了已确定的DB2限制:例如,表的数目太多,语句中的字节太多
如果不连续,你可以多谢几个语句,然后用UNION把结果集连接在一起,只能这样变向解决
fly2749 2009-03-02
  • 打赏
  • 举报
回复
我用aqua data stuido执行报以下异常:

>[Error] Script lines: 1-470 ------------------------
DB2 SQL error: SQLCODE: -101, SQLSTATE: 54001, SQLERRMC: null
Message: The statement is too long or too complex.

More exceptions ... DB2 SQL error: SQLCODE: -727, SQLSTATE: 56098, SQLERRMC: 2;-101;54001;

请高手分析。
Mr_Bean 2009-03-02
  • 打赏
  • 举报
回复
select m.customID, u.userName from CstCustomManager m, SysUser
u where m.userID = u.ID and m.customID in (1207, 1208, 1209, 1210, 1211, 1212,
1213, 1214, 1215, 454, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225,
1226, 1227, 1228, 1229, 1216, 8012, 1230, 1231, 1232, 1233, 1234, 1235, 1236,
1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249,
1250, 1251, 1252, 1253, 1254, 1255, 1260, 1261, 1262, 1263, 1264, 1265, 1266,
1267, 1268, 1269, 1256, 1257, 1258, 1259.......);
这样的语句直接在db2中运行正常吗?

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧