[java] Java Persistence / JPA : @Column 대 @Basic

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



답변

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

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

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

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

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

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


답변

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

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

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


답변

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

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

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

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

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


답변

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

  • @Column 주석의 nullable 속성은 해당 데이터베이스 열이 null 일 수 있는지 여부를 지정합니다.
  • @Basic을 사용하여 필드가 느리게로드되어야 함을 나타낼 수 있습니다.
  • @Column 주석을 사용하면 매핑 된 데이터베이스 열의 이름을 지정할 수 있습니다.
  • @Basic 주석은 속성을 Java 개체 수준에서 선택 사항이 아닌 것으로 표시합니다. 그리고 (nullable = false) 열 매핑에서 NOT NULL 데이터베이스 제약 조건의 생성 만 담당합니다.

답변