@GenerateValue : 기본 키를 자동 생성해주는 어노테이션이다.
IDENTITY, SEQUENCE, TABLE 전략이 있다.
Reference : @GenerateValue
Reference : 영속성 컨텍스트
트랜잭션 : 모든 작업들이 성공적으로 완료되어야 작업 묵음의 결과를 적용하고, 어떤 작업에서 오류가 발생했을 때는 이전에 있던 모든 작업들이 성공적이었더라도 없었던 일처럼 완전히 되돌리는 것이다.
데이터베이스를 다룰 때 트랜잭션을 적용하면 데이터 추가, 갱신, 삭제 등으로 이루어진 작업을 처리하던 중 오류가 발생했을 때 모든 작업들을 원상태로 되돌릴 수 있다. 모든 작업들이 최종적으로 데이터베이스에 반영하도록 한다.
스프링에서 @Transactional을 이용하여 트랜잭션 처리 하는 방법
=> DB와 관련된, 트랜잭션이 필요한 서비스 클래스 혹은 메서드에 @Transactional 어노테이션을 달아주면된다. @Transactional이 붙은 메서드는 메서드가 포함하고 있는 작업 중에 하나라도 실패할 경우 전체 작업을 취소한다.
결론 : 일련의 작업들을 묶어서 하나의 단위로 처리하고 싶다면 @Transactional을 활용하자.
Reference : @Transactional
영속성 컨텍스트에서 식별자가 같으면 같은 엔티티로 인식한다.