2014-05-02 183 views
0

以下对象:为什么HQL查询看起来不应该这样工作?

class UserEntity { 
    UUID id; 
    private List<TeamEntity> teams = new ArrayList<TeamEntity>(); 
    private List<RuleEntity> rules = new ArrayList<RuleEntity>(); 
    ... 

} 

class RuleEntity { 
    UUID id; 
    private TeamEntity ownerTeam; 
    private List<UserEntity> users = new ArrayList<UserEntity>(); 
    ... 
} 

Class TeamEntity { 
    UUID id; 
    private List<UserEntity> users = new ArrayList<UserEntity>(); 
    private List<RuleEntity> rules = new ArrayList<RuleEntity>(); 
} 

如果我执行下面的HQL查询它完成,没有错误,并返回正确的结果:

select count(ruleEntity) from RuleEntity ruleEntity where :userId in elements(ruleEntity.users) and ruleEntity.ownerTeam.id = :teamId 

不过,我不明白这一点是如何工作的:

where :userId in elements(ruleEntity.users) 

对我来说这是检查是否用户ID(这是一个UUID)集合ruleEntity.users中存在,这是UserEntitys的名单,S o我会虽然这将失败,因为它在一个UUID对象的UserEntity对象列表中检查?

回答

1

它选择具有用户和用户的至少一个列表中的所有ruleEntities列表中包含:用户id PARAM

在SQL方面

FROM rule_entity 
WHERE :userId in (select user_id 
        from rule_entity_users 
        where rule_entity.rule_id=rule_entity_users.rule_id) 
相关问题