본문 바로가기
728x90
반응형

자바/JPA30

[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] 영속성 전이 : Cascade, 고아 객체 어떤 쇼핑몰 사이트에서 주문 정보가 들어왔다. 주문 테이블 구조는 Master, Detail 2개의 테이블 구조이고, 주문 정보가 들어올 때, 주문 상세 정보가 같이 들어올 때, 데이터를 일일이 넣어주는 소스를 넣는 것은 개발자 입장으로서는 참으로 불편한 일이 아닐 수 없다. 이럴 때 영속성 전이를 하여 CASCADE 속성을 넣어주면 편하다 다만 CASCADE는 하나의 마스터 테이블만을 참조할 때만 사용할 수 있다. 특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속상태로 만들고 싶을 때 CASCADE를 사용한다. 예 : 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장하는 형태 ※ 영속성 전이: 저장 @OneToMany(mappedBy="parent", cascade=CascadeType... 2023. 3. 3.
[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.
728x90
반응형