Java休眠找不到布尔型的验证器

时间:2018-12-13 19:53:42

标签: java spring hibernate validation annotations

我有一个服务方法,该方法尝试使用休眠的store()方法添加对象。 get方法适用于此DAO和服务类,但添加不起作用。在控制台中没有错误。

UrlWhiteListDaoImpl urlDao;

MapperFacade mapper;

@Autowired
public UrlWhiteListingServiceImpl(UrlWhiteListDao urlWhiteListDao, MapperFacade mapper, UrlWhiteListDaoImpl urlDao) {
    this.urlDao = urlDao;
    this.urlWhiteListDao = urlWhiteListDao;
    this.mapper = mapper;
}

@Override
public UrlWhiteListDto addUrlWhiteListItem(UrlWhiteListDto urlWhiteListDto) throws Exception {
    String domainUrlToBeAdded = parseUrl(urlWhiteListDto.getDomain());
    if (isDomainExistbyName(domainUrlToBeAdded)) {
        throw new Exception("Already existed domain is tried to be added");
    }
    UrlWhitelist urlModel = mapper.map(urlWhiteListDto,UrlWhitelist.class);
    urlDao.store(urlModel);
    return urlWhiteListDto;

}

我的模型课是:

@Entity
@Table(name = UrlWhitelist.TABLE_NAME)
public class UrlWhitelist implements EntityBean { 

    public static final String TABLE_NAME = "URL_WHITE_LIST";

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", nullable = false)
    private Long id;

    @NotBlank
    @Column(name = "DOMAIN", nullable = false)
    private String domain;

    @NotBlank
    @Column(name = "DISABLE", nullable = false)
    private boolean disabled;

    // getters & setters omitted
}

DAO实现类为:

public class UrlWhiteListDaoImpl extends EntityDaoImpl<UrlWhitelist, Long> implements UrlWhiteListDao {

    protected UrlWhiteListDaoImpl() {
        super(UrlWhitelist.class);
    }

    @Override
    public List<UrlWhitelist> getByDomainName(String name) {
        DetachedCriteria criteria = DetachedCriteria.forClass(UrlWhitelist.class);
        criteria.add(Restrictions.eq("domain", name));
        return getAllByCriteria(criteria);
    }
}

在控制台中没有错误,但是在服务器日志中显示:

  

严重:路径为[]的上下文中的Servlet [服务]的Servlet.service()抛出异常[请求处理失败;嵌套的异常是javax.validation.UnexpectedTypeException:HV000030:找不到约束“ org.hibernate.validator.constraints.NotBlank”验证类型为“ java.lang.Boolean”的验证器。根源检查配置是否为“已禁用”]       javax.validation.UnexpectedTypeException:HV000030:找不到约束“ org.hibernate.validator.constraints.NotBlank”验证类型为“ java.lang.Boolean”的验证器。检查“已禁用”的配置

我认为to与模型类之间的映射存在问题,但是,为什么为什么get方法起作用而只有store()不起作用?解决方案是什么?

2 个答案:

答案 0 :(得分:1)

您应该使用@NotNull批注。

您的boolean是原始类型,而不是对象类型(Boolean),因此由于原始类型不能为null,因此无法应用约束@NotNull。批注执行以下验证(我添加的格式):

  

带注释的元素不能为null。接受任何类型。

使用对象类型:

@NotNull
@Column(name = "DISABLE", nullable = false)
private Boolean disabled;

答案 1 :(得分:0)

要解决此错误,您必须使用正确的注释。在上述问题中,@ NotBlank批注只能应用于任何String字段。

要验证布尔类型字段,请使用批注@NotNull或使用布尔型框式