Paradox Simulation

728x90
반응형

@JPA 엔티티와 데이터베이스 테이블 간의 매핑을 위한 어노테이션

JPA는 객체와 관계형 데이터베이스 간의 매핑을 수행하는 기술이다.

이를 위해 JPA에서는 @Entity와 @Table 어노테이션을 사용한다.

@Entity는 JPA 엔티티임을 나타내고, @Table은 엔티티와 매핑되는 데이터베이스 테이블의 이름을 지정한다.

이 두 어노테이션의 차이점에 대해서 알아보도록 하겠다.

 

@Entity 어노테이션

@Entity 어노테이션은 JPA에서 엔티티 클래스임을 나타내기 위해 사용된다.

엔티티 클래스란, 객체와 관계형 데이터베이스 간의 매핑을 수행할 대상이 되는 클래스를 의미한다.

즉, JPA에서 엔티티 클래스는 데이터베이스 테이블과 매핑되는 클래스이다.

 

@Entity 어노테이션은 다음과 같은 속성을 가질 수 있다.

  • name: 엔티티의 이름을 지정한다. 기본값은 클래스의 이름이다.
  • catalog: 엔티티가 속한 카탈로그의 이름을 지정한다.
  • schema: 엔티티가 속한 스키마의 이름을 지정한다.
  • uniqueConstraints: 엔티티의 유니크 제약 조건을 지정한다.

 

@Table 어노테이션

@Table 어노테이션은 엔티티 클래스와 매핑되는 데이터베이스 테이블의 이름을 지정하기 위해 사용된다. 

기본적으로 JPA는 엔티티 클래스의 이름과 동일한 이름의 데이터베이스 테이블을 찾아 매핑한다.

그러나, @Table 어노테이션을 사용하면 엔티티 클래스와 매핑되는 데이터베이스 테이블의 이름을 직접 지정할 수 있다.

 

@Table 어노테이션은 다음과 같은 속성을 가질 수 있다.

  • name: 엔티티와 매핑되는 데이터베이스 테이블의 이름을 지정합니다.
  • catalog: 테이블이 속한 카탈로그의 이름을 지정

 

@Entity와 @Table에 차이점

@Entity와 @Table은 둘 다 JPA에서 클래스와 데이터베이스 테이블을 매핑하기 위해 사용된다. 

그러나 이 두 어노테이션은 서로 다른 용도를 가지고 있다.

 

@Entity


@Entity 어노테이션은 JPA에서 클래스가 엔티티임을 나타낸다. 

즉, 클래스를 데이터베이스 테이블과 매핑할 때 이 어노테이션을 사용한다. 

이를 통해 JPA는 클래스가 영속적으로 저장되어야 하는 객체임을 알게 되며, 데이터베이스와 매핑할 때 필요한 메타데이터를 생성한다.

 

예를 들어, 다음과 같은 User 클래스가 있다고 하자.

 

@Entity
public class User {
    @Id
    private Long id;
    private String username;
    private String password;
    // ...
}

위의 코드에서 @Entity 어노테이션이 User 클래스 위에 선언되어 있다. 

이것은 User 클래스가 JPA 엔티티임을 나타낸다. 

JPA는 이 클래스와 데이터베이스 테이블 간의 매핑을 위해 User 클래스의 메타데이터를 생성한다.

 

 

@Table

@Table 어노테이션은 클래스와 데이터베이스 테이블 간의 매핑을 지정하는 데 사용된다. 

즉, 클래스의 이름과 데이터베이스 테이블의 이름이 다른 경우 이를 매핑할 때 이 어노테이션을 사용한다.

 

예를 들어, User 클래스와 user 테이블이 있다고 가정해보자. 

이 경우 @Table 어노테이션을 사용하여 클래스와 데이터베이스 테이블 간의 매핑을 지정할 수 있다.

 

@Entity
@Table(name = "users")
public class User {
    @Id
    private Long id;
    private String username;
    private String password;
    // ...
}

위의 코드에서 @Table 어노테이션이 User 클래스 위에 선언되어 있다.

이것은 User 클래스가 users 테이블과 매핑된다는 것을 의미한다.

 

@Entity와 @Table의 관계

@Entity와 @Table은 서로 밀접한 관계를 가지고 있다. 

@Entity는 클래스가 JPA 엔티티임을 지정하고, @Table은 클래스와 매핑되는 데이터베이스 테이블의 이름을 지정한다. 

 

이 둘은 함께 사용되어 클래스와 데이터베이스 테이블 간의 매핑을 구현한다.

 

@Entity가 없이 @Table만 사용한다면, 클래스와 테이블 간의 매핑을 직접 구현해야 하므로 매우 번거롭고 복잡해진다. 

반면에 @Entity가 있다면 JPA가 자동으로 클래스와 테이블 간의 매핑을 수행해주므로 개발자가 직접 구현할 필요가 없다.

 

@Entity와 @Table을 함께 사용하면 다음과 같은 형태가 된다.

 

@Entity
@Table(name = "user")
public class User {
    // ...
}

위의 예제에서 @Table(name = "user")는 User 클래스가 user라는 이름의 데이터베이스 테이블과 매핑되도록 지정하고 있다. 

 

따라서 User 클래스의 객체를 생성하면 해당 객체는 user 테이블에 저장되거나 user 테이블에서 정보를 가져온다.

 

 

@Entity와 @Table은 이외에도 다양한 속성들을 가지고 있다. 

예를 들어, @Table의 schema 속성은 데이터베이스 스키마의 이름을 지정하고, catalog 속성은 데이터베이스 카탈로그의 이름을 지정한다. 

또한 @Table의 uniqueConstraints 속성을 사용하면 테이블 내에서 유니크한 조건을 추가할 수 있다.

 

위의 내용을 종합해보면, @Entity와 @Table은 클래스와 데이터베이스 테이블 간의 매핑을 지정하는 데 사용된다. 

@Entity는 클래스가 JPA 엔티티임을 지정하고, @Table은 클래스와 매핑되는 데이터베이스 테이블의 이름을 지정한다. 

이 둘을 함께 사용하면 개발자는 직접 클래스와 테이블 간의 매핑을 구현하지 않아도 된다.

 

결론

이번 글에서는 @Entity와 @Table의 차이점에 대해 알아보았다.

@Entity는 클래스가 JPA 엔티티임을 지정하고, @Table은 클래스와 매핑되는 데이터베이스 테이블의 이름을 지정한다.

만약 @Table을 생략하면 JPA는 클래스 이름과 동일한 이름의 데이터베이스 테이블과 매핑한다.

 

이 두 어노테이션은 JPA에서 매핑 정보를 제공하는 가장 기본적인 어노테이션이다. 

이를 통해 객체 지향 프로그래밍과 관계형 데이터베이스 간의 매핑을 쉽게 수행할 수 있다.

 

 

728x90
반응형
250x250
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band