Java Persistence / JPA : @Column 대 @Basic


119

JPA에서 @Column@Basic주석 의 차이점은 무엇입니까 ? 함께 사용할 수 있습니까? 함께 사용해야합니까 ? 아니면 그들 중 하나가 충분합니까?

답변:


147
  • @Basic속성이 지속되고 표준 매핑이 사용됨을 나타냅니다. 속성을 지연로드할지 여부와 null 허용 여부를 지정할 수있는 매개 변수가 있습니다.

  • @Column 속성이 지속될 데이터베이스의 열 이름을 지정할 수 있습니다.

다른 것없이 하나를 지정하면 합리적인 기본 동작을 얻으므로 일반적으로 사람들은 특별한 경우를 제외하고 하나만 사용합니다.

따라서 속성의 지연로드를 원하고 열 이름을 지정하려면 다음과 같이 말할 수 있습니다.

 @Basic(fetch=FetchType.LAZY)
 @Column(name="WIBBLE")

기본적이고 게으른 행동 @Column이 필요하다면 그것만으로도 충분했을 것입니다.


2
이것은 명확한 대답입니다. 감사합니다. 그래서 나는 하나가 @Basic없이도 사용할 수 있다고 가정하기 @Column때문에 optionalnullable속성이 둘 다에 존재합니다. 내가 맞아?
Hosam Aly

1
@Basic의 nullable과 @Column의 nullable 사이의 차이점과 둘 중 하나 또는 둘 다 지정하지 않는 효과에 대한 JPA 사양을 완전히 이해한다고 주장하지 않습니다. @Basic nullable은 스키마 생성과 관련된 "힌트"로 설명됩니다. @Column nullable은 데이터베이스에서 열의 특성을 정의하는 것으로 설명됩니다. 내 연습은 @Column 케이스를 사용하는 것입니다.
djna 09-09-05

16
@Basic (선택 사항)은 DB에 저장하기 전에 지속성 공급자가 런타임시 확인해야합니다. @Column은 데이터베이스의 열 정의이며 스키마 생성에 사용됩니다. stackoverflow.com/questions/2899073/…
Piotr Gwiazda

2
'비 게으른'것은 EAGER를 호출합니다. LOL
solvator 2014

7
JPA 어노테이션은 순수 관계형 어노테이션과 구현 어노테이션의 두 그룹으로 나눌 수 있습니다. 순수한 관계형 주석에는 Entity, Basic, OneToOne, OneToMany, ManyToMany, ...가 포함되어 있지만 구현 주석은 순수한 이론적 모델을 실제 데이터베이스에 매핑하는 방법에 대한 단서를 제공합니다. Table, Column, ... 질문에서 'Basic '는 관계형 엔터티 속성에 대한 정보를 제공하는 주석이고'Column '은 데이터베이스 열에 매핑하는 방법에 대한 정보를 제공합니다.
Bruno Ranschaert 2015

50

이외에도 @ djna의 대답은 , 그를 주목할 필요가있다 @Basic과 비교되어야 @OneToMany, @ManyToOne하고 @ManyToMany. 이 중 하나만 모든 속성에 지정할 수 있습니다.

@Column@JoinColumn데이터베이스 열 특성을 설명하기 위해 이들의 함께 지정 될 수 있습니다.

이들은 함께 사용할 수있는 두 세트의 어노테이션이지만 한 번에 각 세트에서 하나의 어노테이션 만 사용할 수 있습니다.


21

Basic이 기본 필드 용으로 설계되었다는 점은 주목할 가치가 있습니다.

http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes

기본 속성은 속성 클래스가 문자열, 숫자, 날짜 또는 기본 형식과 같은 단순한 유형 인 속성입니다. 기본 속성의 값은 데이터베이스의 열 값에 직접 매핑 될 수 있습니다.

지원되는 유형 및 변환은 JPA 구현 및 데이터베이스 플랫폼에 따라 다릅니다. 데이터베이스 유형에 직접 매핑되지 않는 유형을 사용하는 모든 기본 속성은 이진 데이터베이스 유형으로 직렬화 될 수 있습니다.

JPA에서 기본 속성을 매핑하는 가장 쉬운 방법은 아무것도하지 않는 것입니다. 다른 주석이없고 다른 엔티티를 참조하지 않는 속성은 자동으로 기본으로 매핑되며 기본 유형이 아닌 경우에도 직렬화됩니다. 속성의 열 이름은 기본값으로 지정되며 속성 이름과 동일한 이름으로 대문자로 지정됩니다.


좋은 메모. 감사합니다.
Hosam Aly

1
아니요, 열 주석이 지정되지 않은 경우 기본값이 적용됩니다 (이름이 속성 1이 됨).
Gab 2015

2

@Basic 어노테이션은 JPA 엔티티에 적용되고 @Column은 데이터베이스 열에 적용됩니다. @Basic 어노테이션의 선택적 속성은 엔티티 필드가 null 일 수 있는지 여부를 정의합니다. 반면에

  • @Column 주석의 nullable 속성은 해당 데이터베이스 열이 null 일 수 있는지 여부를 지정합니다.
  • @Basic을 사용하여 필드가 느리게로드되어야 함을 나타낼 수 있습니다.
  • @Column 주석을 사용하면 매핑 된 데이터베이스 열의 이름을 지정할 수 있습니다.
  • @Basic 주석은 속성을 Java 개체 수준에서 선택 사항이 아닌 것으로 표시합니다. 그리고 (nullable = false) 열 매핑에서 NOT NULL 데이터베이스 제약 조건의 생성 만 담당합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.