推荐 最新
我是张工你呢

SpringDataJpa中 Specification怎样使用in查询?

"SpringDataJpa"中 "Specification"怎样使用"in"查询 实体类"Menu.java"如下 @Entity @Getter @Table(name = "t_sys_menu") @org.hibernate.annotations.DynamicInsert @org.hibernate.annotations.DynamicUpdate @org.hibernate.annotations.Where(clause = SysConstants.WHERE_DELETE) public class Menu extends TreeEntity { @Column(nullable = false, length = 50) private String name; @Column(length = 100) private String path; @Column(length = 100) private String componentPath; @Column(columnDefinition = "int unsigned") private Integer level; /** * 0表示目录,1表示菜单,2表示按钮 */ @Column(nullable = false, columnDefinition = "tinyint unsigned") private Integer type; @Column(length = 20) private String icon; @JoinColumn @ManyToOne(fetch = FetchType.LAZY) private Application application; @Column(nullable = true, length = 50) private String permission; @Convert(converter = Status.Converter.class) @Column(nullable = false, columnDefinition = "tinyint unsigned") private Status status; private String visible; /** * 打开方式 页签 或是 新窗口 */ private String target; @Column(columnDefinition = "int unsigned") private Integer sort; @Column(length = 200) public String description; @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "t_sys_role_menu", joinColumns = @JoinColumn(name = "menu_id"), inverseJoinColumns = @JoinColumn(name = "role_id")) private Collection roles; 想通过"roles"属性做in查询,代码如下 private Specification buildSearchSpecification(MenuDTO menuDTO) { return (root, query, criteriaBuilder) -> { List predicates = new ArrayList(); if (StringUtils.hasText(menuDTO.getRoleIds())) { List roles = new ArrayList(); for (Long roleId : Convert.toList(Long.class, menuDTO.getRoleIds())) { roles.add(new Role(roleId)); } predicates.add(root.get(Menu_.roles).in(roles)); } return criteriaBuilder.and(predicates.toArray(new Predicate[0])); }; } 错误如下: "Parameter value [com.appmtce.pojo.entity.role.Role@20f81e2a] did not match expected type [java.util.Collection (n/a)]" 我的"Specification"方式的"in"查询写的哪里不对,如何修改正确?

0
1
0
浏览量150