Rule类中是这样的 private List<Organization> organization; //机构 private List<Job> job ; //岗位
                                private RuleType ruleType; //规则类别.
Organization类中是这样的  private List<Rule> rule; //职责
Job类中是这样的    private List<Rule> rule; //职责
RuleType类中是这样的       private List<Rule> rule; //该类别下的规则
都没配置lazy也就是未开启懒加载(注意用的LIST不是用的SET)
现在要写一个语句按照Organization的ID、Job的ID以及RuleType的ID来查询Rule
应该怎么写!
select r from Rule r left outer join fetch r.ruleType rt  left outer join fetch r.organization  left outer join fetch job  where r.state=1  and r.organization.organizationId = 'rganizationId'
我这么写执行的时候是报错了!

解决方案 »

  1.   

    报错是必须的
    多表联合查询 我一直都是用SQL执行 然后将返回的数据封装成对象
    HQL 我没多表查询过
      

  2.   

    select r from Rule r left outer join fetch r.organization left outer join fetch job where r.state=1 and r.organization.organizationId = 'rganizationId' and r.ruleType ="" rule  就不要和ruletype连上了
      

  3.   

    Organization类中是这样的 private List<Rule> rule; //职责
    Job类中是这样的 private List<Rule> rule; //职责
    ???怎么对应关系的双方都是List??有些奇怪啊
      

  4.   

    在hql中都是用对象作为外键,所以在做多表联合查询时用对象.字段名就可以了,比如通过RuleType的ID来查询Rule,这样写就可以了“from Rule where ruleType.ruleTypeId='ruleTypeId'”就可以了
      

  5.   

    你这样写肯定错啊
    select r from Rule r left outer join fetch r.ruleType rt left outer join fetch r.organization left outer join fetch job where r.state=1 and r.organization.organizationId = 'rganizationId'在rule里面organization是List,怎么会直接有organizationId 呢?我也觉得用SQL吧