본문 바로가기
728x90
반응형

jpa31

[JPA/Java] 값 타입 2 (불변 객체) 값 타입은 복잡한 객체 세상을 조금이라도 단순화하려고 만든 개념인데, 따라서 값 타입은 단순하고 안전하게 다룰 수 있어야 한다. 예를 들어, 한 주소 객체를 선언 했는데, 선언한 주소를 두 명의 멤버에 넣고, 주소를 변경시키는 경우, 두 명의 멤버의 주소가 모두 바뀌게 된다. JpaMain.java Address address = new Address("oldHome", "oldStreet", "zipcoode"); Member member1 = new Member(); member1.setUserName("member1"); member1.setHomeAddress(address); em.persist(member1); Member member2 = new Member(); member2.setUser.. 2023. 3. 8.
[JPA/Java] 값 타입 1 (기본 값, 임베디드(복합 값) 타입) JPA는 ORM 방식의 기술로 객체를 테이블에 매핑시켜서 데이터를 관리한다. 객체를 필드로 넣는다고 가정할 때, DB에 데이터를 넣을 때 필드로 넣은 객체에 종속된 필드를 테이블에 같이 넣을 수 있다. 그에 대한 설명에 앞서, JPA의 데이터 타입 분류는 아래와 같다. JPA의 데이터 타입 분류 (1) 엔티티 타입 - @Entity로 정의하는 객체 - 데이터가 변해도 식별자로 지속해서 추적이 가능하다. - 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식이 가능하다. (2) 값 타입 - int, integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가 - 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 한.. 2023. 3. 6.
[JPA/Java] 즉시 로딩과 지연 로딩 어떠한 Member 테이블과 Team 테이블이 있는데 Member는 Team에 속하기 때문에 Member는 Team_ID를 가지고 있다. 만약 Member 객체를 불러올 때, 그 멤버가 속한 팀의 정보를 다 불러와야할까?? 방식에 따라 다르겠지만 JPA에서는 연관관계 데이터를 불러오는 방법 두 가지 방법을 제공한다. (1) 지연 로딩 (FetchType.LAZY) Member.java @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") p.. 2023. 3. 2.
[JPA/Java] 프록시(Proxy) 프록시 기초 프록시란? 프록시는 진짜 객체 대신에 가짜 객체로서 진짜를 대신해주는 개념 Hibernate는 지연 로딩을 구현하기 위해 프록시를 사용한다. 프록시를 사용할 때는, EntityManager에서 getReference() 를 사용하여 진짜 객체를 참조하여 가짜 객체를 만든다. 진짜 객체를 호출할 때는 em.find() 를 사용하지만, 가짜 객체는 em.getReference() 를 사용한다. 프록시의 특징은 다음과 같다. 1) 실제 클래스를 상속 받아서 만들어진다. 2) 실제 클래스와 비슷하다. 3) 사용하는 입장에서는 진짜 객체인지, 프록시 객체인지 구분하지 않고 사용해도 된다. Member 클래스를 예제로, 임의로 데이터를 생성하여 인스턴스를 생성하고, 인스턴스를 영속시킨 다음, 객체를 참.. 2023. 2. 27.
[JPA/Java] 고급 매핑 (상속관계 매핑<조인, 단일 테이블>, @MappedSuperclass) 상속관계 매핑 - 관계형 DB는 상속 관계가 아니다. - 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. - 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 - 각각 테이블로 변환 → 조인 전략 - 통합 테이블로 변환 → 단일 테이블 전략 - 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 주요 어노테이션 - @Inheritance(starategy=InhereitanceType.XXX) - JOINED : 조인 전략 - SINGLE_TABLE : 단일 테이블 전략 - TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 - @DiscriminatorColumn(name="DTYPE".. 2023. 2. 21.
[JPA/JAVA] 다양한 연관관계 매핑 (N:1, 1:N, 1:1, N:M) 연관관계 매핑 시 고려사항 3가지가 있다 - 다중성에 있어서 어떤 관계인지 - 단방향인지, 양방향인지 - 연관관계의 주인은 누구인지 다중성은 4가지의 관계가 있다 - 다대일(N:1) : @ManyToOne - 일대다(1:N) : @OneToMany - 일대일(1:1) : @OneToOne - 다대다(N:M) : @ManyToMany 단방향, 양방향 관계에 있어서 - 테이블 : 외래 키 하나로 양쪽 조인이 가능하다. : 원래 방향이라는 개념은 없다 - 객체 : 참조용 필드가 있는 쪽으로만 참조가 가능하다 : 한쪽만 참조하면 단방향이고 : 양쪽이 서로 참조하면 양방향이다. 연관관계의 주인은 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 객체의 양방향 관계는 A → B, B → A 처럼 참조가 2군.. 2023. 2. 20.
728x90
반응형