목록전체 글 (155)
Rootable의 개발일기
관계형 데이터베이스에서는 슈퍼타입과 서브타입을 통해 상속 관계를 대체한다. 이러한 슈퍼타입과 서브타입이라는 논리 모델을 실제 물리 모델로 구현하는 방법들을 살펴보자 📌 조인 전략 부모(슈퍼타입)와 자식(서브타입)을 각각 테이블로 변환하여, 각자가 가진 필드를 통해 참조하는 전략이다. 가장 논리적이고 객체 지향적인 방법으로 비즈니스적으로 중요도가 높게 사용된다. 아래와 같이 서브타입에 이름을 지정하면 데이터베이스에 해당 이름으로 필드에 저장된다. 🔎 특징 서브타입을 구분하는 컬럼(DTYPE)을 슈퍼타입이 가짐 슈퍼타입의 PK = 서브타입의 PK이면서 FK 🔎 장단점 ✔ 장점 테이블 정규화가 되어 중복을 줄일 수 있다. 외래키 참조 무결성 제약 조건을 활용할 수 있다. 다른 테이블에서 슈퍼타입 엔티티만 살펴..
📌 객체의 연관 관계 매핑 관계형 DB는 외래키를 통해 연관 관계를 맺는다. 다음은 관계형 DB에 맞춘 엔티티 설계다. 아래 코드를 통해 연관 관계 엔티티인 Team을 저장하면 ID 값이 저장된다. Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setName("member1"); member.setTeamId(team.getId()); em.persist(member); tx.commit(); 이처럼 ID 값이 저장되기 때문에 em.find 한 번으로 객체 조회가 완료되지 않는다. try { ... Member findMember = em.find(Member.class..
📌 엔티티 매핑(@Entity) 클래스에 @Entity를 선언하면 JPA가 관리하는 엔티티가 된다. 이로 인해 JPA는 애플리케이션 로딩 및 실행 시점에 매핑할 테이블을 자동 생성한다. 즉, create, insert 등의 DDL문을 자동으로 생성한다는 것이다. 다음과 같은 제약 조건을 줄 수 있다. @Entity public class Member { @Id private Long id; @Column(nullable = true, length = 10) //null 허용x, 길이 10 이하 private String name; private int age; ... JPA는 동적으로 객체를 생성하기 때문에 기본 생성자가 필수이며, 변경이 불가능한 필드를 선언해서는 안된다. final class enum..
📌 영속성 컨텍스트(Persistence Context)란 엔티티를 영구 저장하는 환경으로 EntityManager를 통해 접근할 수 있다. 일반적으로 JPA에서는 persist 함수를 통해 해당 엔티티를 영속화(영속성 컨텍스트에 저장)한다. EntityManger.persist(entity); //entity를 영속화 💡 Spring Data JPA의 영속화 Spring Data JPA에서는 Repository를 상속받은 JpaRepository라는 인터페이스를 제공한다. Repository 인터페이스를 정의하면 해당 Entity의 데이터를 사용할 수 있는데, 이것은 내부적으로 EntityManger 가 직접 대상 Entity의 데이터를 관리하기 때문이다. 그리고 Spring Data JPA에서 Rep..