hql的问题,帮忙解决下

wuxiao_v 2010-11-25 05:44:06
有三个类(表)
User , Customer , CustomerCategory
其中User 和Customer 是一对多的关系,一个User 可以有很多Customer。 Customer 和 CustomerCategory 是多对多关系。
现在问题是这样的,前边传过来一个User 列表和一个 CustomerCategory 列表,获取符合条件的Customer 列表。
这个hql应该怎么写。

以下是我写的两个hql:

select distinct(c) from Customer c join c.customerCategorys cc join c.user u where (cc.id = ? and u.id= ? ... 循环产生后部分

另一个
select distinct(c) from Customer c where c.id in ( select c1.id from Customer c1 join c1.customerCategorys cc where cc.id in (:ccIds) and c.user.id in (:uIds) ;

这两个都很慢大概20秒左右,生成的sql大约100kb左右的样子。有什么办法能让查询快一些,可以不用hibernate 或者用存储过程等,数据库oracle11g。
高手指点 谢谢。
...全文
109 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cys1990922 2010-11-26
  • 打赏
  • 举报
回复
Hibernate本身性能就不行,更何况级联操作?
采用c3p0或jndi操作或许能一定程度上帮你的忙!
wanwang8 2010-11-26
  • 打赏
  • 举报
回复
不需要怎么变的话 ,可以用二级缓存试试!
zn85600301 2010-11-26
  • 打赏
  • 举报
回复
你去看下SQL优化的规则吧
本来如果你的表数据量大的话 3表联合查询肯定会很慢 只能加索引
底下那个SQL 性能差是因为 distinct in 子查询本身查询速度就慢
你可以用执行计划看哪里消耗了查询时间
不善^ 2010-11-26
  • 打赏
  • 举报
回复
表间的关系 可以在java代码中实现 这样大大减少了 访问数据库的次数
youngpeer 2010-11-26
  • 打赏
  • 举报
回复
Customer 和 CustomerCategory 为什么要用多对多的关系?最好采用中间表的形式。
xieshengjun2009 2010-11-26
  • 打赏
  • 举报
回复
sql优化方面的工作,没弄过,到网上多搜搜吧,希望你自己可以解决!
wuxiao_v 2010-11-26
  • 打赏
  • 举报
回复
help help need help~~~

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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