在我的用户表中我有两个用户 尝试使用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);
我很困惑,请指教,谢谢。
答案 0 :(得分:0)
与渴望获取有很多对多的关系。 Criteria查询将被转换为带有连接的SELECT,因此在结果中每个用户都会有很多行。
要删除重复项,请将所有结果添加到HashSet,或使用DistinctRootEntityResultTransformer。