Hibernate没外键关联的两个表做联合查询

Hibernate没有外键关联的两个表做联合查询

     早几天修改某网站的数据读取缓慢的问题,数据读取主要涉及两个表,Product(产品表),ProductCategory(产品类别关联表).

 

     经过分析源码,得到相应的HQL语句:

     from Product qp inner join ProductCategory qpc on where qpc.productId=qp.id and qpc.categoryId = XX and qp.isHot =X order by qp.listId

 

     运行报错:

     net.sf.hibernate.QueryException: outer or full join must be followed by path expression [....]

     查找相关资料分析结果:

     只有两个entity有association的状况下,才能使用join。比如Product and ProductCategory有many-to-one association
      再有:HQL中没有“on X= X”这样的语法

      修改配置文件多方面不允许,把语句改成:

      from Product qp, ProductCategory qpc where qpc.productId=qp.id and qpc.categoryId = X and qp.isHot =X  order by qp.listId

      但这样返回的是两个对象,List中每一项都是一个对象数组,再次修改语句,加上select qp ;

      select qp from Product qp, ProductCategory qpc where qpc.productId=qp.id and qpc.categoryId = X and qp.isHot =X  order by qp.listId

      新问题
     返回的Product entity有重复的。因为一个流程有多个审批记录,inner join 之后对应每个审批记录都会返回一样的流程

      加上distinct语句

      select distinct qp from Product qp, ProductCategory qpc where qpc.productId=qp.id and qpc.categoryId = X and qp.isHot =X  order by qp.listId

     问题解决.

     注:是SQL的话,使用 distinct qp.* 可行。但是对于HQL,没法使用 * 来选择属性,它属于一个对象.使用 qp 即可