programing

@Column JPA 어노테이션에 설정된 경우 길이 속성은 무엇을합니까?

nasanasas 2020. 12. 25. 10:05
반응형

@Column JPA 어노테이션에 설정된 경우 길이 속성은 무엇을합니까?


JPA에서 열의 길이를 정확히 설정하는 것은 무엇입니까?

@Column(name = "middle_name", nullable = false, length = 32)
public String getMiddleName() {
    return this.middleName;
}

주석을 사용하여 엔터티 개체를 기반으로 데이터베이스 스키마 (DDL)를 생성 할 수 있다는 것을 알고 있지만 길이는 지속성이 발생할 때 어떤 종류의 검사 나 절단을 수행합니까, 아니면 스키마 생성에만 사용됩니까?

또한 JPA가 다양한 구현 위에있을 수 있다는 것을 알고 있습니다.이 경우 제가 염려하는 구현은 Hibernate입니다.


길이는 지속성이 발생할 때 어떤 종류의 검사 또는 절단을 수행합니까, 아니면 스키마 생성에만 사용됩니까?

주석 length속성은 다음 Column을 지정하는 데 사용됩니다.

컬럼 길이. (문자열 값 열이 사용되는 경우에만 적용됩니다.)

그리고 생성 된 DDL에서만 사용됩니다. 귀하의 예에서 결과 열은로 생성되고 VARCHAR(32)더 긴 문자열을 삽입하려고하면 SQL 오류가 발생합니다.


유효성 검사 를 위해 Bean 유효성 검사 API ( JSR 303 ) 에서 @Size(max=32) 제약 조건추가 할 수 있습니다 . 여기에 실행 가능한 테스트와 함께 샘플을 제공했습니다 .

모두를 제공 Size하고 length중복 보일 수 있지만에 따라 부록 D. 콩 검증 인식 DDL을 생성하는 콩 검증 스펙은 지속성 공급자를위한 필수가 아닙니다. 따라서 유효성 검사 length를 위해 DDL에 사용 하십시오 @Size.

관심이있는 경우 JPA 2.0을 사용하여 클래스 경로에 Bean Validation 구현을 배치하십시오. JPA 1.0에서는이 이전 답변을 참조하십시오 .


@column (length = 32)는 DDL 용도로만 사용되며 제한이 아니라는 것은 테이블 수준에서 제한되지 않는 한 32 자 이상을 허용한다는 의미입니다. 크기를 제한하려면 @size (max = 32)로 이동합니다.


Hibernate 4.3.11 (및 기타 버전)은 Validation Annotations에주의를 기울여야합니다. -업그레이드해야 할 수도 있습니다.

이것은 Hibernate 4.3.11 매뉴얼 에서 인용 한 것입니다.

22 장. 추가 모듈

Hibernate Core는 또한 일부 외부 모듈 / 프로젝트와의 통합을 제공합니다. 여기에는 Bean Validation (JSR 303) 및 Hibernate Search의 참조 구현 인 Hibernate Validator가 포함됩니다.

22.1 장 빈 검증

... Hibernate와 Bean Validation 간의 통합은 두 가지 수준에서 작동합니다. 첫째, 제약 조건 위반에 대해 클래스의 메모리 내 인스턴스를 확인할 수 있습니다. 둘째, Hibernate 메타 모델에 제약을 적용하고 생성 된 데이터베이스 스키마에 통합 할 수 있습니다. ...

22.1.4 장 데이터베이스 스키마

Hibernate는 정확한 데이터베이스 스키마를 생성하기 위해 Bean Validation 제약을 사용합니다 :

@NotNull leads to a not null column (unless it conflicts with components or table inheritance)

@Size.max leads to a varchar(max) definition for Strings

@Min, @Max lead to column checks (like value <= max)

@Digits leads to the definition of precision and scale (ever wondered which is which? It's easy now with @Digits :) )

참고 : @Lengh도 @Size처럼 작동합니다.


Hibernate Validator 5.1을 사용할 때-el-Implementation도 필요합니다. 예를 들면

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>el-impl</artifactId>
    <version>2.2</version>
</dependency>

당신이없는 경우, 최대 절전 모드 ORM은 최대 절전 모드 검증을 시작할 수 없었던 것이다 광고 따라서는받지 않을 것 (모든) JSR-303 예를 들어 @Length, @Size계정에서!

참조 URL : https://stackoverflow.com/questions/2875149/what-does-the-length-attribute-do-when-set-on-the-column-jpa-annontation

반응형