为什么@size注解不能在列表上工作?

0pizxfdo  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(345)

我的实体属性如下所示:

@Valid
@Size(min=1, max=16)
@ManyToMany(cascade={ CascadeType.PERSIST })
@JoinTable(name="CustomerRoles",
           joinColumns={ @JoinColumn(name="CustomerId") },
           inverseJoinColumns={ @JoinColumn(name="RoleId") }
)
@JsonProperty(access=JsonProperty.Access.WRITE_ONLY)
private List<Role> roles = new ArrayList<Role>();

@JsonIgnore
public List<Role> getRoles() {
    return this.roles;
}

@JsonIgnore
public void setRoles(List<Role> roles) {
    this.roles = roles;
}

@ApiModelProperty(notes="Roles of the customer.", required=true, value="User")
@JsonProperty("roles")
public List<String> getRolesAsStringList() {
    return this.roles.stream().map(Role::getName)
                              .collect(Collectors.toList());
}

当我去保存实体时,会出现以下异常:
约束冲突列表:[constraintviolationimpl{interpolatedmessage='size必须介于1和16之间',propertypath=roles,rootbeanclass=class org..yyy.models.customer,messagetemplate='{javax.validation.constraints.size.message}]]和根本原因
在我保存服务之前的一行,我打印出customer.getroles().size(),它是=1。
@size对列表不起作用吗?我找到的信息似乎表明它应该。
编辑:服务方法如下所示:

public Customer createCustomer(Customer customer) throws InvalidRolesException {
System.out.println("IN1 ==> " + customer.getRoles().size());
        List<String> errors = new ArrayList<String>();

        customer.setRoles(customer.getRolesAsStringList().stream().map(role -> {
            try {
                return new Role(FindRoleByName(role), role);
            }
            catch (Exception e) {
                errors.add(role);
                return null;
            }
        }).collect(Collectors.toList()));
System.out.println("IN2 ==> " + customer.getRoles().size());
        if (!errors.isEmpty())
            throw new InvalidRolesException(errors);
System.out.println("IN3 ==> " + customer.getRoles().size());
        return this.customerRepository.save(customer);
    }

不介意的噪音,那只是按摩一个字符串数组回到角色对象。。。它在3==>1中打印出来。
回购只是股票休眠:

public interface CustomerRepository extends JpaRepository<Customer, Long> {
}
6vl6ewon

6vl6ewon1#

你真的需要这个吗 @ManyToMany 这里的关系?这就足够了:

@Size(min = 1, max = 16)
@JoinColumn(name = "customer_id")
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
private List<Role> roles;

相关问题