본문 바로가기
728x90
반응형

자바51

[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.
[JPA/java] 연관관계 매핑 (단방향, 양방향, 객체, 테이블, 기본키, 외래키 등) 연관 관계에 대한 예를 들기 위해서, 하나의 예를 들어보자. 1) 회원과 팀이 있는데, 2) 회원은 하나의 팀에만 소속될 수 있고, 3) 회원과 팀은 N:1관계이다. 연관 관계가 없는 객체를 테이블에 맞춰 모델링을 하면 아래와 같이 표현할 수 있다. 이것을 소스코드로 표현하면 아래와 같다. (Getter and Setter 생략) Member.java @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; } Team.java @Entity public class Team .. 2023. 1. 25.
[JPA/Java] 엔티티 매핑 (객체, 테이블, 필드, 컬럼, 기본 키 등) 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity @Entity가 붙은 클래스는 JPA가 관리하고, 이를 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity를 필수로 붙인다. ※ 주의 → 기본 생성자를 필수로 한다. (파라미터가 없는 public 또는 protected 생성자) → final 클래스, enum, interface, inner 클래스 사용하지 않음 → 저장할 필드에 final 사용하지 않음 @Entity 속성 정리 - 속성 : name : JPA에서 사용할 엔티티 이름을 지정한다. : 기본값 - 클래스 이름을 그대로 사용(예 : Me.. 2023. 1. 22.
[JPA/JAVA] 플러시 & 준영속 상태 플러시란? : 영속성 컨텍스트의 변경내용을 데이터베이스에 반영 플러시가 발생하는 때는? - 변경을 감지할 때 - 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록할 때 - 쓰기 지연 SQL 저장소의 쿼리(등록, 수정, 삭제 쿼리)를 데이터베이스에 전송할 때 영속성 컨텍스트를 플러시하는 방법은 3가지가 있는데 - em.flush() -- 직접 호출 - 트랜잭션 커밋 -- 플러시를 자동 호출 - JPQL 쿼리 실행 -- 플러시를 자동 호출 가 있다. 직접 호출하는 em.flush()의 경우 Member member = em.find(Member.class, 150L); member.setName("ZZZZ"); em.flush(); System.out.println("=================="); 원.. 2023. 1. 12.
728x90
반응형