createCriteria返回错误的列表大小与HQL列表

时间:2011-11-15 09:29:08

标签: hibernate

在我的用户表中我有两个用户 尝试使用HQL查询选择所有用户时如下:

getCurrentSession().createQuery("From User").list();

它会返回两个元素,而正确

但在使用createCriteria时如下:

getCurrentSession().createCriteria(User.class).list();

它返回 36元素重复的两个元素)!!!!

为什么我在使用createCriteria获得此类行为的任何想法是否与hibernate关系有关?因为在用户域中我与Role域有 ManyToMany 关系,它是否与会话工厂或hibrenate版本或hibernate配置有关?

关系:

@ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "user_role", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "role_id") })
    private Set<Role> roles = new HashSet<Role>(0);

我很困惑,请指教,谢谢。

1 个答案:

答案 0 :(得分:0)

与渴望获取有很多对多的关系。 Criteria查询将被转换为带有连接的SELECT,因此在结果中每个用户都会有很多行。

要删除重复项,请将所有结果添加到HashSet,或使用DistinctRootEntityResultTransformer。