Java 用于阵列验证的Hibernate ScriptAssert

Java 用于阵列验证的Hibernate ScriptAssert,java,spring,hibernate,Java,Spring,Hibernate,我正在使用Hibernate脚本断言进行条件验证: 如果commRolesId包含4且GNRLTransporterID数组列表为空,我希望显示错误消息 @ScriptAssert(lang="javascript", script="this.commRolesId.indexOf(4) >= 0 && _this.gnrlTransportersId.length == 0", message="{notBlank.message}") public class Com

我正在使用Hibernate脚本断言进行条件验证: 如果commRolesId包含4且GNRLTransporterID数组列表为空,我希望显示错误消息

@ScriptAssert(lang="javascript", script="this.commRolesId.indexOf(4) >= 0 && _this.gnrlTransportersId.length == 0", message="{notBlank.message}")
public class CommUserDto {
    @Size(min = 1, message = "{notBlank.message}")
    private List<Long> commRolesId = new ArrayList<>();

    private List<Long> gnrlTransportersId = new ArrayList<>();
}
@ScriptAssert(lang=“javascript”,script=“this.commRolesId.indexOf(4)>=0&&u this.gnrlTransportersId.length==0”,message=“{notBlank.message}”)
公共类CommUserDto{
@大小(最小值=1,message=“{notBlank.message}”)
private List commRolesId=new ArrayList();
private List gnrlTransportersId=new ArrayList();
}
但是,即使commRolesId数组不包含4,它也会抛出消息

请帮忙。谢谢。

编辑:

import java.util.ArrayList;
import java.util.List;

import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.ScriptAssert;

@ScriptAssert(
    lang = "javascript",
    script = "!(_this.commRolesId.contains(4) && _this.gnrlTransportersId.isEmpty())",
    message = "errorMessage")
public class CommUserDto {
  @Size(min = 1, message = "should not be empty")
  private List<Long> commRolesId = new ArrayList<>();

  private List<Long> gnrlTransportersId = new ArrayList<>();

  public List<Long> getCommRolesId() {
    return commRolesId;
  }

  public void setCommRolesId(List<Long> commRolesId) {
    this.commRolesId = commRolesId;
  }

  public List<Long> getGnrlTransportersId() {
    return gnrlTransportersId;
  }

  public void setGnrlTransportersId(List<Long> gnrlTransportersId) {
    this.gnrlTransportersId = gnrlTransportersId;
  }
}
import java.util.ArrayList;
导入java.util.List;
导入javax.validation.constraints.Size;
导入org.hibernate.validator.constraints.ScriptAssert;
@脚本断言(
lang=“javascript”,
script=“!(_this.commRolesId.contains(4)&&_this.gnrlTransportersId.isEmpty())”,
message=“errorMessage”)
公共类CommUserDto{
@大小(最小值=1,消息=“不应为空”)
private List commRolesId=new ArrayList();
private List gnrlTransportersId=new ArrayList();
公共列表getCommRolesId(){
返回commRolesId;
}
public void setCommRolesId(列表commRolesId){
this.commRolesId=commRolesId;
}
公共列表getGnrlTransportersId(){
返回gnrlTransportersId;
}
public void setGnrlTransportersId(列出gnrlTransportersId){
this.gnrlTransportersId=gnrlTransportersId;
}
}
测试:

import java.util.ArrayList;
导入java.util.List;
导入java.util.Set;
导入javax.validation.ConstraintViolation;
导入javax.validation.validation;
导入javax.validation.Validator;
公开课考试{
公共静态void main(字符串[]args){
CommUserDto dto=新的CommUserDto();
List commRolesId=new ArrayList();
commRolesId.添加(1L);
List gnrlTransportersId=new ArrayList();
dto.setGnrlTransportersId(gnrlTransportersId);
dto.setCommRolesId(commRolesId);
Validator Validator=Validation.buildDefaultValidatorFactory().getValidator();
设置constraintViolations=validator.validate(dto);
System.out.println(constraintViolations.size());
System.out.println(约束约束);
}
}

No。如果commRolesId包含4,而gnrlTransportersId数组列表为空,则我希望显示错误消息。不,它不是。即使没有commRolesId=4,也会出现错误消息。为什么脚本会用感叹号否定条件?脚本的计算结果应该为true才能成功。我们只是在做!ErrorCondition,它应该是成功的条件。也很抱歉忘记删除-1。编辑postOne问题:我的字段错误数组为空。如何获取默认消息@用户3487063
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;

public class Test {

  public static void main(String[] args) {
    CommUserDto dto = new CommUserDto();
    List<Long> commRolesId = new ArrayList<>();
    commRolesId.add(1L);
    List<Long> gnrlTransportersId = new ArrayList<>();
    dto.setGnrlTransportersId(gnrlTransportersId);
    dto.setCommRolesId(commRolesId);
    Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
    Set<ConstraintViolation<CommUserDto>> constraintViolations = validator.validate(dto);
    System.out.println(constraintViolations.size());
    System.out.println(constraintViolations);
  }
}