我正在尝试在登录过程中过滤收集。 我在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;
}
问题是控制器在应用过滤器之前重新回到客户端! 如果我在代码中放置断点并让过滤器完成,我可以看到结果已正确过滤。
如果在集合上应用过滤器之前,如何确保控制器不会返回?
答案 0 :(得分:0)
好的,问题是这个问题...... 必须初始化过滤后的集合:
Hibernate.initialize(org.getMembers());