-
Notifications
You must be signed in to change notification settings - Fork 0
3차 세미나 | 키워드 과제 정리
Minjae Lee edited this page May 1, 2024
·
18 revisions
Entity의 생명주기(LifeCycle)는 엔티티가 생성되고, 사용되고, 소멸되기까지의 전 과정을 의미합니다.
Entity가 존재할 수 있는 모든 경우의 수라고 볼 수 있어요!
엔티티 상태 | 설명 |
---|---|
비영속 (New/Transient) | 엔티티가 생성은 되었지만, 영속성 컨텍스트와는 전혀 상관이 없는 상태 |
영속 (Managed/Persistent) | 엔티티가 영속성 컨텍스트에 저장된 상태 (트랜잭션이 커밋되는 시점에 데이터베이스에 반영된다는 의미!) |
준영속 (Detached) | 엔티티가 영속성 컨텍스트로부터 분리된 상태 (이전에는 영속상태였지만, 현재는 연결되지 않았다는 의미!) |
삭제 (Removed) | 엔티티가 영속성 컨텍스트에서 삭제된 상태 (트랜잭션이 커밋되는 시점에 데이터베이스에서 삭제된다는 의미!) |
코드로 살펴보면, Member
라는 클래스가 있을 때 그저 해당 클래스를 이용해서 엔티티 객체(인스턴스)만 생성해준 상태입니다.
인스턴스의 필드값을 지정하는 것도 그저 객체 생성의 일부 과정이라고 볼 수 있겠네요!
Member member = new Member();
member.setName("민재");
member.setAge(25);
엔티티 매니저를 통해 엔티티가 영속성 컨텍스트에 저장된 상태입니다.
영속성 컨텍스트의 특성에 따라 영속 상태가 되었다고 데이터베이스에 저장이 되는 것은 아니고, (= DB에 쿼리가 날아가는 것은 x)
트랜잭션이 커밋될 때 데이터베이스에 반영됩니다.
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist(member);
entityManager.getTransaction().commit();
영속성 컨텍스트로부터 이제 분리된 상태입니다.
분리되었다는 것이 의미하는 바는 "더 이상 엔티티에 대한 변경사항이 자동으로 데이터베이스에 반영되지 않는다"는 것이라고 생각하면 될 것 같아요!
다시 말해, 영속성 컨텍스트가 제공해주는 Dirty Checking 기능을 사용하지 못한다는 것을 의미합니다.
entityManager.detach(member);
영속성 컨텍스트로, 즉 데이터베이스로부터 엔티티가 삭제된 상태입니다.
영속과 마찬가지로 트랜잭션이 커밋되는 시점에 데이터베이스에서 삭제됩니다.
entityManager.getTransaction().begin();
em.remove(member);
entityManager.getTransaction().commit();
Java는 프로그램 실행(runtime) 중 발생할 수 있는 예기치 않은 상황을 Checked Exception과 Unchecked Exception으로 구분합니다.
구분 | Checked Exception | Unchecked Exception |
---|---|---|
처리의무 | 반드시 예외처리(try-catch throw )를 명시해야 함 |
명시적인 예외처리(try-catch throw )를 강제하지 않음 |
상속 | RuntimeException을 상속받지 않음 | RuntimeException을 상속받음 |
체크시점 | 컴파일(Compile) 시점에서 확인 | 런타임(Runtime) 시점에서 확인 |
목적 | 안정성과 예외 예측 가능성을 높이기 위해 사용 | 개발자의 실수에 의해 발생하는 에러를 위해 사용 |
트랜잭션 | 롤백(Rollback) 하지 않음 | 롤백(Rollback) 함 |