목록2023/08 (17)
Rootable의 개발일기
📌 영속성 전파의 필요성 위와 같은 관계에서 연관 관계의 주인은 Child이고, Child를 단독으로 사용하는 Parent 엔티티를 부모 엔티티로 간주한다. 여기서 다음 코드를 수행하면 몇 번의 저장이 발생할까 이렇게 총 3번의 저장이 발생한다. 그런데 Parent는 여러 Child를 단독으로 사용한다. 그렇다면 Parent에서 특정 작업을 했을 때, 모든 Child에 영향을 주는 방법이 없을까? 그래서 등장한 것이 영속성 전이다. 📌 영속성 전이(CASCADE) 특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속 상태로 만들고자 할 때 사용한다. 여기서 영속 상태로 만든다는 것은 저장, 삭제, 병합 등을 수행한다는 것이고, 이러한 작업은 영속 상태일 때 가능하다. 결국 영속성 전이는 부모 ..
📌 단독 조회 Member와 Team이 있고, Member는 Team의 참조값을 가진 상태라고 할 때, 다음 명령문에서 어떤 조회 쿼리가 나가야 할까 Member findMember = em.find(Member.class, member.getId());System.out.println("findMember = " + findMember.getName()); 위 명령문은 조회한 회원의 이름을 출력하는 것이다. 그런데 해당 명령을 수행하기 위해 아래와 같은 쿼리가 실행되었다. 위 결과를 보면 회원 이름을 출력하기 위해 회원과 연관된 Team을 조인으로 가져오는 것을 볼 수 있다. 만약, 회원과 연관된 엔티티가 몇 개씩 있다면 조인문은 더욱 복잡해질 것이다. 이처럼 단독 조회를 최적화하기 위한 방법과 ..
📌 프록시란 실제 클래스를 상속받아 만들어진 가짜 또는 원본을 위임받은 가벼운 객체 프록시 객체는 getClass() 정보에 "HibernateProxy"라는 정보가 붙는다. 📌 프록시 조회 em.find() : 영속성 컨텍스트로부터 타깃 엔티티를 조회, 만약 영속성 컨텍스트에 타깃이 없다면 DB에서 조회 후 영속성 컨텍스트에 저장 ➡ SQL 전송 o, 조회 o em.getReference() : DB 조회를 미루는 가짜(프록시) 엔티티 객체 조회 ➡ SQL 전송 x, 조회 o getReference() 시점이 아닌 getter 시점에 DB에 조회 SQL을 날림 📌 특징 1. 프록시는 실제 객체의 참조(target)을 보관한다. - 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메서드를 호출 2. 실..
관계형 데이터베이스에서는 슈퍼타입과 서브타입을 통해 상속 관계를 대체한다. 이러한 슈퍼타입과 서브타입이라는 논리 모델을 실제 물리 모델로 구현하는 방법들을 살펴보자 📌 조인 전략 부모(슈퍼타입)와 자식(서브타입)을 각각 테이블로 변환하여, 각자가 가진 필드를 통해 참조하는 전략이다. 가장 논리적이고 객체 지향적인 방법으로 비즈니스적으로 중요도가 높게 사용된다. 아래와 같이 서브타입에 이름을 지정하면 데이터베이스에 해당 이름으로 필드에 저장된다. 🔎 특징 서브타입을 구분하는 컬럼(DTYPE)을 슈퍼타입이 가짐 슈퍼타입의 PK = 서브타입의 PK이면서 FK 🔎 장단점 ✔ 장점 테이블 정규화가 되어 중복을 줄일 수 있다. 외래키 참조 무결성 제약 조건을 활용할 수 있다. 다른 테이블에서 슈퍼타입 엔티티만 살펴..