본문 바로가기

jpa16

[JPA] 즉시로딩과 지연로딩 1. 즉시로딩과 지연로딩 앞의 포스팅에서 즉시로딩과 지연로딩을 이해하기 위해서 프록시에 대해서 공부를 하였습니다. Member를 조회할 때 연관된 Team도 함께 조회해야할까요? 비즈니스로직에 필요하지 않는데 연관관계가 걸려있다고해서 Team을 가지고오면 손해입니다. 그래서 jpa는 지연로딩이라는 옵션을 제공합니다. Team team = new Team(); team.setName("teamA"); em.persist(team); Member member1 = new Member(); member1.setUsername("member1"); member1.setTeam(team); em.persist(member1); em.flush(); em.clear(); Member m = em.find(Membe.. 2020. 4. 22.
[JPA] 프록시 1. 프록시 프록시는 실제 엔티티 대신에 사용되는 객체로서, 원본 엔티티를 상속받습니다. 이제부터 프록시를 왜 사용하는지에 대해서 알아보도록 하겠습니다. 다음과 같은 Member Entity와 Team Entity가 있을때 Member를 조회할때 Team도 같이 가지고 올수도 있고, Member만 가지고 올 수 있습니다. em.find() vs em.getReference() em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 em.find는 진짜 객체를 찾아줍니다. 결론적으로는 em.getReference는 DB에 쿼리가 안나가는데 객체가 조회가 됩니다. getReference를 하는 시점에는 데이터베.. 2020. 4. 22.
[JPA] @MappedSuperclass 애노테이션 1. @MappedSuperclass @MappedSuperclass 애노테이션은 공통 매핑 정보가 필요할 때 사용합니다. 아래 테이블 경우뿐만 아니라 실무에서는 모든 곳에 등록자와 수정자, 등록일, 수정일이 들어가는데 이거를 공통으로 만들고 스프링 JPA를 사용하면 저장시에 자동으로 들어가게 할 수 있습니다. 2. @MappedSuperclass 특징 상속관계 매핑X 엔티티X, 테이블과 매핑X 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공 조회, 검색 불가(em.find(BaseEntity) 불가) 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장 테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공.. 2020. 4. 19.
[JPA] 상속 관계 매핑(고급매핑) 1. 상속 관계 매핑 객체는 상속관계가 있는데 관계형 데이터베이스에는 상속관계가 없습니다. 관계형 데이터베이스에는 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사합니다. 객체는 item이라는 추상타입을 만들고 저렇게 구체적으로 갈 수 있습니다. DB의 슈퍼타입 서브타입이라는 논리 모델링 기법을 어떤 3가지 방법으로 구현을 하든 다 매핑하도록 지원하는 것 입니다. 다음은 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 3가지 방법입니다. 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 3가지 전략에 맞는 어노테이션과 다른 부가기능을 사용하기 위한 주요 어노테이션입니다. 부모 Entity의 @Inhe.. 2020. 4. 19.
[JPA] 연관 관계 매핑의 종류 1. 연관관계 매핑의 종류 연관 관계 매핑의 종류는 다음과 같이 4가지입니다. 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 2. 다대일 연관관계 다대일 단방향은 가장 많이 사용하는 연관 관계입니다. 외래 키가 있는 쪽이 연관계의 주인이고 양쪽을 서로 참조하도록 개발합니다. 3. 일대다 연관관계 일대다 단방향은 일대다에서 일(1)이 연관관계의 주인입니다. 테이블 일대다 관계는 항상 다(N)쪽에 외래키가 있습니다. 객체와 테이블의 차이 때문에 반대편 테이블의 외래키를 관리하는 특이한 구조입니다. @JoinColumn을 꼭 사용해야합니다. 그렇지 않으면 조인 테이블 방식을 사용하여 중간에 테이블을 하나 추가합니다. 팀의 Members.. 2020. 4. 19.
[JPA] 연관관계 매핑 기초 1. 테이블 중심 매핑 연관 관계 매핑 시나리오 하나를 살펴 보겠습니다. 회원과 팀 entity 존재 회원은 하나의 팀에만 소속 회원과 팀은 다대일 관계 다음은 객체의 테일블에 맞추어 모델링한 예시입니다. @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; … } @Entity public class Team { @Id @GeneratedValue private Long id; private String name; … } //팀 저장 Team team = new Team.. 2020. 4. 14.