엔티티의 상태 직접 관리, 필요한 시점에 커밋을 해야 함
@PersistenceContext
EntityManager em;
public void join() {
// 기존에 엔티티 상태를 바꾸는 방법(메서드 호출해서 상태 변경)
Member member = new Member(1L, "홍길동");
em.persist(member);
}
public interface MemberRepository extends JpaRepository<Member, Long> {
}
@Entity : 클래스의 객체를 JPA가 관리하는 엔티티로 지정 - 이름을 지정하지 않으면 클래스 이름과 같은 테이블에 매핑
protected 기본 생성자 : 엔티티는 반드시 기본 생성자가 있어야함. public 보다는 proctected가 안전하므로 protected 기본 생성자로 생성
@Id : Long 타입의 id 필드를 테이블의 기본키로 지정
@GeneratedValue : 기본키 생성 방식 결정
@Column : 데이터베이스의 칼럼과 필드 매핑
@Entity //1. 엔티티로 지정
@NoArgsConstructor(access = AccessLevel.PROTECTED) // 2. 기본 생성자
@AllArgsConstructor
@Getter
public class Member {
@Id // 3. Id 필드를 기본키로 지정
@GeneratedValue(strategy = GenerationType.IDENTITY) // 4. 기본키를 자동으로 1씩 증가
@Column(name = "id", updatable = false)
private Long id; //DB 테이블의 'id' 칼럼과 매칭
@Column(name = "name", nullable = false) // 5. name이라는 not null 칼럼과 매핑
private String name; //DB 테이블의 'name' 칼럼과 매칭
}
Entity(name = "member_list") // 'member_list' 라는 이름을 가진 테이블과 매핑
public class Article {
//... 생략 ...
}
@Column 애너테이션의 속성
- name : 필드와 매핑할 컬럼 이름, 설정하지 않으면 필드 이름으로 지정
- nullable : 컬럼의 null 허용 여부, 설정하지 않으면 true(nullable)
- unique : 컬럼의 유일한 값(unique) 여부, 설정하지 않으면 false(non-unique)
- columnDefinition : 컬럼 정보 설정, default값을 줄 수 있음