💻dev/🌱Java+Spring

프록시란 무엇일까? em.find()는 데이터베이스를 통해 실제 엔티티 객체를 조회한다면 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회한다. 이게 무슨 말이냐면... 프록시는 실제 클래스를 상속 받아서 만들어지므로 겉모양이 같다. 프록시 객체는 실제 객체의 참조(target)를 보관한다. 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다.(이론상의 얘기이다.) 예시를 들어보자. Member member = em.getReference(Member.class, “id1”); member.getName(); getReference()만 했을때는 실제로 DB에 접근..
지난 글: https://un-lazy-midnight.tistory.com/96 JPA | 예제로 알아보는 연관관계 매핑 (예제-3) 예제 코드) https://un-lazy-midnight.tistory.com/94 JPA | 예제로 알아보는 연관관계 매핑 (예제-2) 지난 글: https://un-lazy-midnight.tistory.com/91 JPA | 요구사항 분석과 기본 매핑 (예제-1) https://un-lazy-midnight.tistory.co un-lazy-midnight.tistory.com 지난 예제에 이어서 상속관계 매핑을 적용해 보려고 한다. 요구사항 추가 상품의 종류는 음반,도서,영화가 있고 이후 더 확장될 수 있다. 모든 데이터는 등록일과 수정일이 필수다. 도메인 모델,..
상속관계 매핑이란? 관계형 데이터베이스는 상속 관계가 없다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다 그래서 상속관계 매핑이란 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name="DTYPE") 하위 클래스를 구분하기 위한 용도의 컬럼이다. @DiscriminatorValue("XXX") 하위 클래스를 구분하기 위한 용도의 값을 직접 지정할 때 사용한다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 ..
예제 코드) https://un-lazy-midnight.tistory.com/94 JPA | 예제로 알아보는 연관관계 매핑 (예제-2) 지난 글: https://un-lazy-midnight.tistory.com/91 JPA | 요구사항 분석과 기본 매핑 (예제-1) https://un-lazy-midnight.tistory.com/90 JPA | 필드와 컬럼 매핑, 기본 키 매핑 필드 - 컬럼 매핑 아래와 같은 요구사항이 주 un-lazy-midnight.tistory.com 지난 예제에 배송, 카테고리를 추가하려고 한다. 주문과 배송은 1:1 상품과 카테고리는 N:M ERD와 엔티티 상세를 다음과 같이 변경한다. //Category @Entity public class Category { @Id @..
다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany -> 다대다는 실무에서 쓰면 안된다! 방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래 키를 관리할 곳을 지정해야 함 연관관계의 주인: 외래 키를 관리하는 참조 주인의 반대편: 외래 키에 영향을 주지 않음. 단순 조회만. 다대일[N:1] 단방향: 가장 많이 사용하는 연관관계, 반..
지난 글: https://un-lazy-midnight.tistory.com/91 JPA | 요구사항 분석과 기본 매핑 (예제-1) https://un-lazy-midnight.tistory.com/90 JPA | 필드와 컬럼 매핑, 기본 키 매핑 필드 - 컬럼 매핑 아래와 같은 요구사항이 주어진다고 가정해보자. 1. 회원은 일반회원/관리자로 구분 2. 회원 가입일과 수정일 un-lazy-midnight.tistory.com 이번에는 지난 글에 이어서 예제를 통해 연관관계 매핑을 실습해보자. 테이블 구조 지난번과 동일하다. 객체구조 참조를 사용하도록 변경한다. MEMBER (1) : ORDER (N) 일대다 ORDER (1) : ORDERITEM (N) 일대다 ITEM (1) : ORDERITEM (N)..
흔히 C언어에 포인터가 있다면 JPA에는 mappedBy가 있다고들 한다. 이 글에서는 예제를 통해 양방향 연관관계와 mappedBy를 알아보자. 지난 글에서 단방향 연관관계를 가졌던 객체를 양방향으로 매핑해본다. 양방향으로 매핑된 객체의 구조는 다음과 같다.코드 역시 아래와 같이 변경한다.팀@Entity public class Team { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "team") List members = new ArrayList();회원public class Member { @Id @GeneratedValue private Long id; @Column(name="USERNAME") p..
들어가기전에...용어 설명 방향: 단방향, 양방향 다중성: 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 연관관계의 주인: 객체 양방향 연관관계는 관리 주인이 필요 이 글에서는 간단히 회원-팀 예제를 통해 연관관계의 기초를 이해해보자. 예제 시나리오는 다음과 같다. 1. 회원과 팀이 있음 2. 회원은 하나의 팀에만 소속. 3. 회원과 팀은 다대일 관계. 일단 연관관계가 없는 객체를 먼저 알아보자. 테이블에 맞춰 객체를 아래와 같이 모델링 하였다. @Entity public class Member { @Id @GeneratedValue @Column(name="MEMBER_ID") private Long id; @Column(name="USERNAME") private String ..
쁜새
'💻dev/🌱Java+Spring' 카테고리의 글 목록 (7 Page)