我正在使用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