: @Entity 어노테이션을 붙인 클래스는 JPA가 관리하는 엔티티가 된다.
엔티티 이름 default는 클래스 이름이며, @Entity(name = "")를 통해 엔티티 이름을 지정할 수 있다.
: @Table(name="")을 통해 DB 테이블 이름을 지정할 수 있다.
Entity 이름은 JPQL(HQL)에서 사용하는 엔티티 이름이고,
Table 이름은 DB 테이블 이름이다.
ex) class 이름이 Member일 때,
@Entity 혹은 @Entity @Table만 사용
-> entity, table = default
@Entity(name="MemberEntity")
-> entity = MemberEntity, table = default
@Entity
@Table(name="MemberTable")
-> entity = default, table = MemberTable
@Entity(name="MemberEntity")
@Table(name="MemberTable")
-> entity = MemberEntity, table = MemberTable
[참고] https://walkingtechie.blogspot.com/2019/06/difference-between-entity-and-table.html
: table의 primary key와 필드 매핑. 항상 @Entity와 함께 사용해야 하며, @Id가 붙은 필드가 없으면 오류 발생.
: Id, 기본키를 자동으로 할당해준다. @GeneratedValue를 사용하지 않으면, 직접 기본키를 할당해주어야 한다. 이는 같은 Id를 할당했을 때 무결성이 위반되어 SQLException이 발생할 수 있으므로, @GeneratedValue를 사용하는 게 좋다.
@GeneratedValue(strategy = GenerationType.IDENTITY)
: 기본키 생성을 DB가 하는 전략. MySQL, MariaDB에서 사용
@GeneratedValue(strategy = GenerationType.SEQUENCE)
: DB의 Sequence Object를 사용하는 전략. @SequenceGenerator 필요. Oracle에서 사용
@GeneratedValue(strategy = GenerationType.TABLE)
: 키 생성 테이블을 만들어서 사용하는 전략. 성능이 그닥 좋지 않음
@GeneratedValue(strategy = GenerationType.AUTO)
: DB Dialect에 따라 IDENTITY, SEQUENCE, TABLE 중 자동으로 지정.(h2는 SEQUENCE)
DB에 insert 쿼리가 실행되는 시점이 다르다.
: @Column 애너테이션이 붙은 필드와 DB table의 컬럼 매핑.
속성으로 nullable, length, updatable, unique 등등이 있다.
: enum 타입 객체인 엔티티 필드에 적용. 주로 상태를 나타낼 때 쓴다.
: 해당 필드를 테이블의 열과 매핑하지 않음
@Entity
@NoArgsConstructor
public class Member() {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
long memberId;
@Column(nullable = false)
int age;
@Enumerated(value = EnumType.String)
MemberStatus memberStatus;
@Transient
@Column(nullable = false)
int weight;
}
엔티티 간의 연관 관계 설정은 글이 너무 길어지므로 다음 포스팅에서 정리하도록 하겠다 ❗ -> https://velog.io/@leh0818/Spring-JPA-%EC%97%B0%EA%B4%80-%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91-kli8lqjw