공부기록/JPA

    JPA - 복합키

    JPA - 복합키

    이번 포스트에서는 복합키에 대해서 정리해볼려고 한다 이전에도 몇번 사용은 해봤지만 헛갈리는 부분도 있고 자주 사용하지 않았다보니 까먹는 부분이 있어 정리해 보고자 한다 Composite Key (복합키) 우선 복합키에 대해서 알아보자 다들 알다시피 DB (여기서 DB는 Oracle, MySQL과 같은 관계형 데이터베이스를 지칭한다) 에서는 주어진 개체 집합 내에서 개체들을 구별할 수 있는 방법이 있어야 한다 다르게 표현하면 한 개체 집합에서 모든 속성들의 값이 정확하게 같은 개체들이 존재하면 안된다는 말이다 이러한 것을 위해서 키의 개념이 필요하고 그 키 중에서는 Super key, Candidate Key, Primary key가 적용 가능하다 이 중에서 우리는 Primary key를 선정해서 개체를 ..

    JPA Proxy 객체 사용 기

    JPA Proxy 객체 사용 기

    서론 개인 프로젝트를 진행하면서 복합키를 사용할 일이 생겨 진행을 하는 도중 발생된 문제점과 해결 과정을 정리한 내용입니다 테이블의 구성은 user와 group이 다대다로 사이에 중간 매핑 테이블을 두어 각 PK를 사용하여 복합키를 설정하였다 문제점 @Entity @Getter @NoArgsConstructor @AllArgsConstructor public class UserGroup implements Persistable { @EmbeddedId private UserGroupId id; @Enumerated(EnumType.STRING) private GroupRole groupRole; @MapsId("userId") @ManyToOne(fetch = LAZY) @JoinColumn(name =..

    JPA- JPQL

    경로표현식 상태필드: 단순 값 저장 필드 (m.username), 추가 탐색 불가 단일값 연관필드: XXXToOne연관, 추가 탐색 가능(member.team.teamname), 묵시적 inner join발생 컬렉션 값 연관 필드: XXXToMany연관, 추가 탐색 불가, 묵시적 inner join 발생 직접 명시적 조인으로 사용 페치조인 JPQL에서 성능 최적화를 위해 제공되는 기능 연관된 엔티티나 컬렉션을 같이 조회하는 기능 fetch전략을 LAZY로 설정을 해두더라도 가지고 올때 한번에 조회를 한다 다대일 페치조인 jpql select m from Member m join fetch m.team sql로 변환시 select m.*, t.* from Member m inner join team t o..

    JPA-JPQL

    JPQL 엔티티 객체를 조회하는 객체지향 쿼리이다 테이블 대상이 아닌 객체를 대상으로 쿼리를 실행한다 간단한 예시를 보면 아래 sql문은 테이블 전체를 조회하는 반면 jpql은 Member객체를 조회하는 것을 볼 수있다 실행이 될때는 결국 sql문을 변환되어 실행이 된다 이때 어느 한 데이터베이스에 종속 된 것이 아니기 때문에 방언만 변경을 해주면 해당 데이터베이스에 맞게 변환하여 실행한다 sql select * from Member m jpql select m from Member m 기본 규칙 엔티티나 속성에 관해서는 대소문자를 구별하지만 select, from 과 같은 키워드 문법에 대해서는 대소문자를 구별하지 않는다 from 절에는 클래스 명이 아닌 엔티티 명을 지정한다(@Entity(name="..

    JPA-값타입

    JPA-값타입

    기본값 타입 자바 기본타입 - int, double Wrapper 클래스 - Integer, Long String 생명주기를 엔티티에 의존하고 절대로 공유하면 안된다--> 다른 객체에서 값을 변경했는데 같이 변경될 수 잇음 임베디드 타입 새로운 값 타입을 정의하여 사용하는 것이다 C, C++에서 구조체를 정의하여 사용하는 것과 비슷하다고 생각된다 @Embeddable public class Address { private String city; private String street; private String zipcode; } @Embedded private Address address; 위 코드와 같이 임베디드 타입은 선언부에 @Embeddable, 사용하는 곳에 @Embedded을 표시해 주어야 ..

    JPA-프록시

    프록시 실제 클래스를 상속받아서 만들어진 가짜 객체 객체를 DB에서 찾을 때와는 다르게 em.persist()가 아닌 em.getReference()를 이용해서 조회를 한다 메서드명에서 보는거와 같이 무언가(실제 객체)를 참조를 하고 있는 객체이다 프록시 객체는 getXXX()처럼 실제로 처음 사용이 될때 값이 초기화가 된다 이미 영속성 컨텍스트에 찾는 객체가 있으면 실제 엔티티 반환된다 초기화 과정 getXXX()처럼 실제로 사용 영속성 컨텍스트에 초기화 요청 DB조회 실제 Entity생성 실제 객체를 참조하고 있는 target.getXXX()실행 org.hibernate.Hibernate.initialize(프록시객체);을 이용하여 강제로 직접 초기화 할 수 있다 즉시로딩 지연로딩 설정 방법 @XXX..

    JPA-고급매핑2

    복합키와 식별 관계 매핑 식별관계: 부모테이블의 pk를 자식테이블의 pk겸 fk로 사용되는 경우 비식별관계: 부모테이블의 pk를 자식테이블의 fk로 사용되고 개별 pk가 존재하는 경우 @IdClass 식별자 클래스 조건 식별자 클래스 속성명과 사용하는 클래스 속성명이 같아야 한다 Serializable 인터페이스 구현 - 왜 구현을 해야하는지 아직은 잘 모르겠음 추가 공부 기본생성자, equals, hashCode 구현 public으로 클래스 지정 @EmbeddedId IdClass와 다르게 식별자 클래스 자체를 기본키로 매핑을 한다 --> 보다 더 객체 지향스러운 느낌 식별자 클래스 조건 @Embeddable어노테이션 사용 Serializable 인터페이스 구현 - 왜 구현을 해야하는지 아직은 잘 모르..

    JPA 고급매핑1

    상속관계 매핑 객체의 상속구조를 DB의 슈퍼타입 서브타입관계로 매핑을 하는 것이다 조인 전략 단일 테이블 전략 개별 테이블 전략 조인전략 @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn//생략가능 @Inheritance 어노테이션을 이용하여 join전략으로 전략을 선택을 하면 된다 @DiscriminatorColumn 어노테이션은 자식 테이블을 구별을 할 수 있도록 도와주는데 default값은 DTYPE으로 컬럼명이 정해진다 자식 테이블 구분 컬럼 값을 직접 지정을 하고 싶으면 @DiscriminatorValue("값")을 자식 객체에 지정을 해주면 해당 값으로 칼럼 값이 지정이 된다 default로는 객체 명 사용 자식 테이블의..

    JPA 연관관계 매핑

    JPA 연관관계 매핑

    JPA공부함에 있어서 내용은 인프런 김영한님 강의와 책을 참고하여 정리한 것입니다 (필기 및 공부정리용) https://www.inflearn.com/course/ORM-JPA-Basic# 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔 www.inflearn.com 연관관계 매핑 객체의 참조와 테이블의 외래키를 매핑 테이블에서는 외래키를 사용해서 각각의 테이블의 값을 가져올 수 있지만 객체를 단순히 테이블매핑해서 생성을 한다면 값을 참조가 불가능하다 Team team = new Team..

    JPA 엔티티

    JPA 엔티티

    JPA공부함에 있어서 내용은 인프런 김영한님 강의와 책을 참고하여 정리한 것입니다 (필기 및 공부정리용) https://www.inflearn.com/course/ORM-JPA-Basic# [자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔 www.inflearn.com](https://www.inflearn.com/course/ORM-JPA-Basic#) 엔티티 매니저 팩토리, 엔티티 매니저 Entity ManagerFactory 애플리케이션 전체에서 하나만 공유해서 사용 Entity M..