본문 바로가기

전체 글97

[JPA] 임베디드 타입 임베디드 타입 임베디드 타입 사용법 @Embeddable: 값 타입을 정의하는 곳에 표시 @Embedded: 값 타입을 사용하는 곳에 표시 기본 생성자 필수 임베디드를 사용하면 재사용이 가능하고 Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메소 드를 만들 수 있습니다. @AttributeOverride: 속성 재정의 한 엔티티에서 같은 값 타입을 사용하려면 @AttributeOverrides, @AttributeOverride를 사용해서 컬러 명 속성을 재정의 합니다. 2023. 5. 1.
[JPA] 프록시와 연관관계(즉시로딩, 지연로딩, 영속성 전이) 프록시 객체의 초기화 Member를 조회할 때 Team도 함께 조회되는걸 막기 위해서 지연로딩을 사용한다. 이유는 쓸때없는 join을 해서 쿼리 조회 시간을 낭비 할수도 있기 때문입니다. 지연로딩 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @ManyToOne(fetch = FetchType.LAZY) //** @JoinColumn(name = "TEAM_ID") private Team team; .. } 지연로딩을 사용할 경우 실제 team을 사용하는 시점에서만 쿼리를 사용하게 됩니다. Team team = member.getTeam(); te.. 2023. 4. 29.
[JPA] 상속관계 매핑 관계형 데이터베이스는 상속 관계가 없습니다. 그래서 슈퍼타입 서브타입 관계라는 모델링 기으로 객체 상속과 유사하게 만들어 사용한다고 합니다. 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은 크게 3가지가 있습니다. 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 장점 테이블 정규화 저장공간 효율화 외래 키 참조 무결성 제약조건 활용가능 단점 조인을 많이 사용해서 저능 저하 데이터저장시 INSERT 쿼리 2번 호출 장점 조인을 사용하지 않아서 조회 성능이 빠름 단점 엔티티가 매핑한 컬럼은 모두 null을 허용해야 한다 모든 테이블.. 2023. 4. 23.
[JPA] 다대일 [N:1] 일대일 [1:1] 다대다 [N:M] 다대일 단방향 정리 • 가장 많이 사용하는 연관관계 다대일 양방향 정리 • 외래 키가 있는 쪽이 연관관계의 주인 • 양쪽을 서로 참조하도록 개발 일대다 단방향 정리 • 일대다 단방향은 일대다(1:N)에서 일(1)이 연관관계의 주인 • 테이블 일대다 관계는 항상 다(N) 쪽에 외래 키가 있음 • 객체와 테이블의 차이 때문에 반대편 테이블의 외래 키를 관리하 는 특이한 구조 일대다 양방향 정리 • 이런 매핑은 공식적으로 존재X • @JoinColumn(insertable=false, updatable=false) • 읽기 전용 필드를 사용해서 양방향 처럼 사용하는 방법 • 다대일 양방향을 사용하자 일대일 정리 주 테이블에 외래 키 • 주 객체가 대상 객체의 참조를 가지는 것 처럼 주 테이블에 외래 키를 두고.. 2023. 4. 5.
[JPA] 연관관계 매핑 (단방향, 양방향) 위에 그림을 보면 객체를 테이블에 맞추거 모델링 한 경우인데 현재 회사에서 주로하는 JPA를 사용하지않고 있어서 주로 하는 방법인데 김영한의 JPA강의를 듣고 뭔가 잘못된다는 것을 알게 되었습니다. meber객체로 team정보를 찾으려고면 외래키를 직접 다루기 때문에 식별자로 한번더 조회를 해야 한다. 객제지향 방법과는 상당히 거리가 있다. JPA를 사용하면 이런한 문제를 아주 쉽게 해결 할 수 있다. 바로 단방향 연관관계다. 테이블 설계는 위의 그림과 동일하다. 단방향 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; .. 2023. 4. 2.
[Mybatis] postgreSql 프로시저(Procedure) 호출하기 이런 프로시저가 있다고 가정하겠습니다. DB는 postgreSql 입니다. CREATE OR REPLACE PROCEDURE public.prc_new_class_certificate_num ( p_certificate_year character varying, p_emp_type character varying, p_learn_type_cd character varying, p_certificate_issue_user character varying, p_certificate_user_id character varying, p_class_seq numeric, p_course_seq numeric ) LANGUAGE plpgsql AS ... 프로시저 마이바티스에서 사용하는 방법 CALL PROCEDU.. 2023. 3. 16.