日期:2014-05-20  浏览次数:20766 次

hql的问题,帮忙解决下
有三个类(表) 
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。
高手指点 谢谢。

------解决方案--------------------
Customer 和 CustomerCategory 为什么要用多对多的关系?最好采用中间表的形式。