programing

혼동: @NotNull vs. JPA 및 최대 절전 모드와 함께 @Column(nullable = false)

prostudy 2022. 4. 17. 09:53
반응형

혼동: @NotNull vs. JPA 및 최대 절전 모드와 함께 @Column(nullable = false)

  1. 그들이 들판에 나타날 때/그것들이 나타날 때@Entity, 그들 사이의 차이점은 무엇인가? (나는 동면기를 통해 엔터티를 지속한다.

  2. 각 프레임워크 및/또는 사양은 무엇인가?

  3. @NotNull에 위치하다javax.validation.constraints. 에서.javax.validation.constraints.NotNull자바도크라고 쓰여 있다.

    주석이 달린 요소는 null이 아니어야 한다.

    그러나 데이터베이스에 있는 요소의 표현에 대해서는 언급하지 않는데, 왜 제약 조건을 추가해야 하는가?nullable=false그 칼럼으로?

@NotNull JSR 303 Bean Validation 주석이다.데이터베이스 제약 그 자체와는 아무런 관계가 없다.그러나 최대 절전 모드는 JSR 303의 기준 구현이므로 이러한 제약 조건을 지능적으로 파악하여 데이터베이스 제약으로 변환하므로 1의 가격에 2개를 얻을 수 있다.@Column(nullable = false) 컬럼을 Null이 아니라고 선언하는 JPA 방식이다.즉, 전자는 유효성 검사를 위한 것이고 후자는 데이터베이스 스키마 세부사항을 표시하기 위한 것이다.이제 막 여분을 좀 더 받으세요(환영합니다!)확인 주석에 대한 최대 절전 모드 도움말.

최신 버전의 최대 절전 모드 JPA 제공자는 다음과 같이 콩 유효성 검사 제약 조건(JSR 303)을 적용한다.@NotNull기본적으로 DDL로(덕분에)hibernate.validator.apply_to_ddl property로 기본 설정하다.true그러나 다른 JPA 제공자들이 그렇게 하거나 심지어 그렇게 할 수 있는 능력을 가지고 있다는 보장은 없다.

다음과 같은 콩 유효성 검사 주석을 사용해야 한다.@NotNullJVM에서 자바 콩을 검증할 때 콩 속성이 Null이 아닌 값으로 설정되도록 보장하기 위해(데이터베이스 제약 조건과는 무관하지만 대부분의 상황에서는 콩 속성과 일치해야 함).

다음과 같은 JPA 주석을 추가로 사용해야 한다.@Column(nullable = false)원하는 데이터베이스 제약 조건을 사용하여 테이블 열을 생성하기 위한 올바른 DDL을 생성하기 위한 힌트를 jpa 제공자에게 제공.기본적으로 DDL에 콩 유효성 검사 제약 조건을 적용하는 최대 절전 모드와 같은 JPA 제공업체에 의존할 수 있거나 의존하려는 경우 생략할 수 있다.

JPA@Column주석

nullable의 속성@Column주석에는 두 가지 목적이 있다.

  • 스키마 생성 도구에 의해 사용됨
  • 지속성 컨텍스트를 플러시할 때 최대 절전 모드에서 사용됨

스키마 생성 도구

이다.@Column(nullable = false)에 대한 엔티 속성NOT NULL생성 시 관련 테이블 열에 대한 제약 조건CREATE TABLE명세서

동면 사용자 안내서에서 설명했듯이 데이터베이스 스키마 생성을 위해 HBM2DDL 메커니즘에 의존하지 말고 Flyway와 같은 도구를 사용하는 것이 좋다.

지속성 컨텍스트 플러시

지속성 컨텍스트를 플러시할 때 최대 절전 모드 ORM도@Column(nullable = false)엔티티 속성:

new Nullability( session ).checkNullability( values, persister, true );

유효성 검사에 실패하면 최대 절전 모드에서는PropertyValueException그리고 INSERT 또는 UPDATE 문이 반드시 실행되지 않도록 방지한다.

if ( !nullability[i] && value == null ) {
    //check basic level one nullablilty
    throw new PropertyValueException(
            "not-null property references a null or transient value",
            persister.getEntityName(),
            persister.getPropertyNames()[i]
        );    
}

콩 유효성 검사@NotNull

@NotNull주석은 Bean Validation에 의해 정의되며, 가장 인기 있는 JPA 구현인 것처럼, 가장 인기 있는 Bean Validation 구현은 Beannet Validator 프레임워크이다.

최대 절전 모드 ORM과 함께 최대 절전 모드 유효성 검사기를 사용할 경우 최대 절전 모드 유효성 검사기는ConstraintViolation엔티티의 유효성을 확인할 때.

흥미로운 점은 모든 출처가 @Column(nullable=false)은 DDL 생성에만 사용된다는 것이다.

단, @NotNull 주석이 없어도, 동면한다.check_nullability 옵션이 true로 설정되었으며, 최대 절전 모드에서는 유지할 엔티티의 유효성 검사를 수행하십시오.

데이터베이스 계층에서 이러한 제한이 구현되지 않더라도 null=false 속성에 값이 없는 경우, "not-null 속성은 null 또는 임시 값을 참조한다"고 하는 PropertyValueException을 발생시킬 것이다.

최대 절전 모드에 대한 자세한 정보.check_reasability 옵션은 http://docs.jboss.org/hibernate/orm/5.0/userguide/html_single/Hibernate_User_Guide.html#configurations-mapping에서 이용할 수 있다.

참조URL: https://stackoverflow.com/questions/7439504/confusion-notnull-vs-columnnullable-false-with-jpa-and-hibernate

반응형