使用Hibernate for Many-to-Many关系获取的重复记录

时间:2014-12-08 23:23:14

标签: java spring hibernate spring-mvc hql

我正在使用Spring MVC 3.x使用hibernate构建的时间表应用程序。

我有一个TimeOff类,它有一个用户和用户类有一组角色和一个管理员,经理再次是一个用户。页面提取大小是25,我希望看到25行的Timeoff为用户,但如果管理员分配了多个角色,则生成的hibernate查询具有交叉产品,并且每个角色都有重复的行。 setResultTransformer返回唯一的结果,在这种情况下小于25。 所以我的问题是如何避免获取任何重复项。我试过子查询没有成功

当前输出如下:

Time Off       User    Manager  Manager Role
10-Dec-2014     A      C1         ROLE_USER
10-Dec-2014     A      C1         ROLE_MANAGER
11-Dec-2014     A      C1         ROLE_USER
11-Dec-2014     A      C1         ROLE_MANAGER

依旧......

@Entity
class TimeOff {
  @ManyToOne
  @JoinColumn(name="user_id")
  private User user;
}

@Entity
class User {
    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    private User manager;

    @ManyToMany(fetch = FetchType.EAGER) 
    @JoinTable(
            name="user_role",
            joinColumns = { @JoinColumn( name="user_id") },
            inverseJoinColumns = @JoinColumn( name="role_id")
    )    
    public Set<Role> getRoles() {
        return roles;
    }

    @ManyToOne
    @JoinColumn(name="MANAGER")
    public User getManager() {
        return manager;
    }
}

@Controller
class TimeOffController {
  protected DetachedCriteria getCriteria(HttpServletRequest request) {
  DetachedCriteria criteria = DetachedCriteria.forClass(TimeOffRequest.class, "i");
  User user = getUser(request); 
  criteria.add(Restrictions.eq("user", user));
  criteria.setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY);
  return criteria;

}

谢谢,Vikas

0 个答案:

没有答案