반응형
@Entity
@Getter @Setter
public class Member {
...
@Id @GeneratedValue
@Column(name = "member_id")
private Long id;
@PersistenceContext
private EntityManager em;
public void save(Member member) {
em.persist(member);
...
}
JPA에서 em.persist를 하면, 이 순간에 영속성 컨텍스트에 이 멤버 객체를 올린다.
@Entity
@Getter @Setter
public class Member {
...
@Id @GeneratedValue
@Column(name = "member_id")
private Long id;
...
}
그때, 영속성 컨텍스트는 PK키와 VALUE가 있는데, 이 id 값이 키가 된다.
DB, PK랑 매핑한 것이 키가 된다.
그래서, @GeneratedValue를 세팅하면 DB 마다 다르지만, 어떤 DB는 시퀀스를 넣기도 하고, 어떤 DB는 테이블을 가짜로 만들어서 그 테이블로부터 키를 따서 넣기도 한다. 어쨌든..
이 id 값이 항상 생성이 되어 있는 것이 보장된다. em.persist 할 때 말이다.
왜냐하면, 영속성 컨텍스트에 값을 넣어야 하는데, 보통 그 때 (키-벨류가 된다) 저 PK에 값을 그대로 넣는다. 그러면서 동시에 id에 값을 채워준다. 아직 DB에 들어간 시점이 아니어도 그렇게 해준다. 그래서 member.getId(); 이렇게 꺼내면 항상 값이 있다는 것이 보장된다.
반응형
'스프링 부트' 카테고리의 다른 글
@Autowired 어노테이션을 통한 인젝션(Injection) 방법들 (0) | 2025.02.18 |
---|---|
JPA @Transactional (0) | 2025.02.18 |
[error] fatal: 관계 없는 커밋 내역의 병합을 거부합니다 (0) | 2025.02.14 |
GitHub 원격 저장소의 모든 브랜치 가져오기 (0) | 2025.02.14 |
스프링 부트 JPA 쿼리 파라미터 로그 남기기 (P6Spy 이용) (0) | 2025.02.12 |