<Spring Boot / Hibernate>由于javax.validation.ConstraintViolationException而无法提交JPA事务

在使用休眠模式执行数据库更新时遇到问题。尝试执行repository.add(Object)操作时,它会给出一个验证异常。

我已经在模型类上添加了验证,但是我尝试插入的值似乎可以满足要求,所以我不知道出了什么问题。

如果删除验证批注,repository.add(object)可能会成功完成,即

$tagQuery ="SELECT p.srNumber,h.handoverFrom,h.handoverRemarks FROM plannertags p
                                JOIN handovertable h
                                on p.srNumber = h.plannerTagsId
                               WHERE (p.status = '0' OR p.status = '2') AND p.currentStage = '1' AND p.assignedTo = '0' AND p.handoverStatus = '1' AND p.failedStatus = '1' AND h.latestTag = '1'
                               ORDER BY p.deliveryDate ASC";

请查看是否有任何建议,非常感谢。

MySQL(8.0.17)模式

<Spring Boot / Hibernate>由于javax.validation.ConstraintViolationException而无法提交JPA事务

休眠配置(application-test.yml)

//  @Max(value = 30,message = "Name can only have a maximum length of 30")
//  @Max(value = 30,message = "Color can only have a maximum length of 30")

模型(Car.java)

...
......
spring.datasource.url: jdbc:mysql://[the host URL]:3306/test
spring.datasource.username: [the username]
spring.datasource.password: [the password]]
spring.jpa.hibernate.ddl-auto: update 
...
......

存储库(CarRepository.java)

package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

@ApiModel(value = "Car",description = "The model for car")
@Schema
@Entity
@Data
public class Car {
    @ApiModelProperty(notes = "Car ID.",example = "12345",required = false,position = 0)
    @Id
    @GeneratedValue
    private Long id;

    @ApiModelProperty(notes = "Car name.",example = "Suzuki Swift 2020",required = true,position = 1)
    @NotNull
    @Max(value = 30,message = "Name can only have a maximum length of 30")
    private String name;

    @ApiModelProperty(notes = "Car color.",example = "blue",position = 2)
    @NotNull
    @Max(value = 30,message = "Color can only have a maximum length of 30")
    private String color;
}

服务(TestService.java)

package com.example.demo.repo;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.example.demo.model.Car;

@Repository
public interface CarRepository extends JpaRepository<Car,Long> {

}

Spring Boot 2.3.1

与Maven(pom.xml)数据相关的依赖项

...
......
public List<Car> getallCars() {
    return carRepository.findAll();
}

public void addNewCar(Car car) {
    carRepository.save(car);
}

public void deleteAllCars() {
    carRepository.deleteAll();
}
...
......

JUnit测试(MiscTest.java)(应该满足验证要求)

    ...
    ......
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    ...
    ......

收到异常

...
......
@Test
public void shouldBeAbleToDeleteCarAndAddCarAndGetallCars() {
    testService.deleteAllCars();

    Car car = new Car();
    car.setName("Toyota Camry");
    car.setColor("blue");

    testService.addNewCar(car);

    List<Car> carList = testService.getallCars();

    assertEquals(1,carList.size());

    testService.deleteAllCars();
}
...
......
iCMS 回答:<Spring Boot / Hibernate>由于javax.validation.ConstraintViolationException而无法提交JPA事务

@Size将代替@Max@Min

您应该参考this link以获得更好的理解。

主要区别是:

@Size用于检查字段的长度约束,它支持StringCollectionMaparrays

另一方面,@Min@Max用于验证数字字段的值,这些值可以是String(representing number)intshort,{{1 }}等。 或他们各自的原始包装器

,

@Max批注似乎不适用于Spring Boot休眠模式。 当将其更改为@Size批注时,add(object)(即DB插入)可以成功完成。

感谢 Nurdhiat Malik的建议。

本文链接:https://www.f2er.com/1810822.html

大家都在问