[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가 할 수있는 작업입니다.)