[java] @Basic (optional = false) vs @Column (nullable = false) in JPA

차이 무엇 @Basic(optional = false)@Column(nullable = false)JPA의 지속성은?



답변

Gordon Yorke (EclipseLink 아키텍처위원회 위원, TopLink 핵심 기술 책임자, JPA 2.0 전문가 그룹 구성원)는이 주제에 대해 좋은 답변을 썼으므로 그를 의역하는 대신 그의 답변을 인용하겠습니다 .

차이 optional
nullable들이 평가되는 범위이다. ‘ optional‘ 의 정의는 속성 및 필드 값에 대해 설명하고이 기능이 런타임 내에서 평가되어야 함을 제안합니다. ‘ nullable‘은 데이터베이스 열에 대한 참조에만 있습니다.

구현이 구현을 선택하면 optional해당 속성은 지속성 공급자에 의해 메모리에서 평가되어야하며 SQL이 데이터베이스로 전송되기 전에 발생하는 예외가 발생합니다. 그렇지 않으면 ‘ updatable=false‘ ‘ optional‘를 사용할 때 위반이보고되지 않습니다.


답변

그래서 JPA 2.1 (EclipseLink)을 사용하여 @Basic (optional = false) 주석을 시도했는데 주석이 실제 사용에서 무시되는 것으로 나타났습니다 (적어도 문자열 필드의 경우). (예 : entityManager.persist 호출).

그래서 나는 사양으로 가서 그것에 대해 읽었습니다. 사양은 다음과 같습니다.
http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-oth-JSpec/

기본 (선택 사항) : 필드 또는 속성의 값이 null 일 수 있는지 여부. 이것은 힌트이며 기본 유형에 대해서는 무시됩니다. 스키마 생성에 사용될 수 있습니다.

그래서이 문장은 스키마 생성에 사용되는 Basic (선택 사항)의 실제 사용 사례를 설명한다고 생각합니다. (즉 : Java Entity 클래스에서 CREATE TABLE SQL을 생성 할 때. 예를 들어 Hibernate가 할 수있는 작업입니다.)


답변