Hibernate过滤器不适用于Spring MVC控制器

时间:2016-09-02 15:09:17

标签: java spring hibernate rest spring-mvc

我正在尝试在登录过程中过滤收集。 我在paren实体上声明了一个“@FilterDef”:

@FilterDef(name = "organizationMemberFilter", parameters = @ParamDef(name = "MemberIdParam", type = "integer"))

并将其设置在子属性上:

@JsonIgnore
@OneToMany(cascade = CascadeType.MERGE, orphanRemoval = true)
@LazyCollection(LazyCollectionOption.EXTRA)
@JoinColumn(name = "ORG_ID", referencedColumnName = "ID")
@OrderColumn(name = "ID")
@Filter(name = "organizationMemberFilter", condition = "id = :MemberIdParam")
private Set<Member> members = new HashSet<Member>();

在控制器上我正在使用这个过滤器:

@RequestMapping("/login/{id}/{pass}")
public Feedback login(HttpServletRequest request, @PathVariable("id") String id,
        @PathVariable("pass") String password, HttpServletResponse res) {
    Feedback feedback = new Feedback();
    DataSource ds = (DataSource) context.getBean("dataSource");
    .
    .
    .
        if (mem.getType().equals("admin")) {
            // Get all members
            session.disableFilter("organizationMemberFilter");
        } else {
            //Filter members
            Filter filter1 = session.enableFilter("organizationMemberFilter");
            filter1.setParameter("MemberIdParam", mem.getId());
        }               
        org = (Organization)session.get(Organization.class,orgid);

        logger.debug("num of members: " + org.getMembers().size());

        feedback.getData().put("entity", org);
        feedback.setSuccess();
    } 
    return feedback;
}

问题是控制器在应用过滤器之前重新回到客户端! 如果我在代码中放置断点并让过滤器完成,我可以看到结果已正确过滤。

如果在集合上应用过滤器之前,如何确保控制器不会返回?

1 个答案:

答案 0 :(得分:0)

好的,问题是这个问题...... 必须初始化过滤后的集合:

Hibernate.initialize(org.getMembers());