Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';t@Size注释工作在列表中?_Java_Spring_Spring Boot - Fatal编程技术网

Java 为什么';t@Size注释工作在列表中?

Java 为什么';t@Size注释工作在列表中?,java,spring,spring-boot,Java,Spring,Spring Boot,我的实体属性如下所示: @Valid @Size(min=1, max=16) @ManyToMany(cascade={ CascadeType.PERSIST }) @JoinTable(name="CustomerRoles", joinColumns={ @JoinColumn(name="CustomerId") }, inverseJoinColumns={ @JoinColumn(name="RoleId") } ) @JsonPrope

我的实体属性如下所示:

@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());
}
@有效
@尺寸(最小值=1,最大值=16)
@ManyToMany(cascade={CascadeType.PERSIST})
@JoinTable(name=“CustomerRoles”,
joinColumns={@JoinColumn(name=“CustomerId”)},
inverseJoinColumns={@JoinColumn(name=“RoleId”)}
)
@JsonProperty(access=JsonProperty.access.WRITE_ONLY)
私有列表角色=新的ArrayList();
@杰索尼奥雷
公共列表getRoles(){
返回此.roles;
}
@杰索尼奥雷
public void setRoles(列出角色){
this.roles=角色;
}
@ApiModelProperty(notes=“客户的角色”,required=true,value=“用户”)
@JsonProperty(“角色”)
公共列表getRolesAsStringList(){
返回此.roles.stream().map(Role::getName)
.collect(Collectors.toList());
}
当我去保存实体时,我得到以下异常:

约束冲突列表:[ ConstraintViolationImpl{interpolatedMessage='size必须介于1和16'之间,propertyPath=roles,rootBeanClass=class org.xxx.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);
    }
public Customer createCustomer(客户客户)抛出InvalidRoleSexException{
System.out.println(“IN1==>”+customer.getRoles().size());
列表错误=新建ArrayList();
customer.setRoles(customer.getRolesAsStringList().stream().map(角色->{
试一试{
返回新角色(FindRoleByName(角色),角色);
}
捕获(例外e){
错误。添加(角色);
返回null;
}
}).collect(Collectors.toList());
System.out.println(“IN2==>”+customer.getRoles().size());
如果(!errors.isEmpty())
抛出新的InvalidRoleSexException(错误);
System.out.println(“IN3==>”+customer.getRoles().size());
返回此.customerRepository.save(客户);
}
不要介意噪音,那只是将字符串数组推回角色对象。。。它在3==>1中打印出来

回购只是股票休眠:

public interface CustomerRepository extends JpaRepository<Customer, Long> {
}
公共接口CustomerRepository扩展了JpaRepository{
}

您真的需要这里的
@manytomy
关系吗?这应该足够了:

@Size(min = 1, max = 16)
@JoinColumn(name = "customer_id")
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
private List<Role> roles;
@Size(最小值=1,最大值=16)
@JoinColumn(name=“客户id”)
@OneToMany(cascade=CascadeType.ALL,orphan=true,fetch=FetchType.EAGER)
私有列表角色;

你能发布一个简短的服务示例吗?@sebastianulrich我已经用服务和报告更新了帖子。。。没什么大不了的…@SebastianUllrich似乎问题在于我正在做=new ArrayList();我自己当我注释出新的部分并让框架来做时,它会按预期工作。。。奇怪…@Sebastianulrich嗯。。。不。。。也不起作用。。。仅适用于完全缺失的节点。我从我的一个项目中复制了此示例。请随意更改
级联
获取
策略…我最初认为这是因为我正在替换角色的值,但即使在我修改它时也会发生。如果我对Dto对象施加大小约束,那么它会起作用。。。我不知道,hibernate实体只是不喜欢约束它……仍然会在1TM关系上抛出大小约束。问题发生在我创建客户对象并保存而不是仅仅读取它们时。