BackEnd/JPA
-
OneToMany 단방향과 양방향 매핑BackEnd/JPA 2022. 7. 23. 23:32
- 일대다 단방향 - 일대다 양방향 - 다대일 양방향 객체 매핑과는 무관하게 DB 설계는 동일하게 적용된다. Team Member member없음 team_id(fk) 1. 일대다 단방향 매핑 OneToMany 에서 One 이 연관관계의 주인이 된다는 의미이다. 비지니스에서 만약 Team 에서는 List 정보가 필요하지만 , Member 에서는 Team 이 필요없는 상황. //일대다 단방향 매핑, 연관관계 주인 TEAM class Team @OneToMany @JoinColumn(name = "member_id") private List member; class Member //Team 정보 없음 > Team 의 Member List 를 수정할 때 Member update 쿼리가 자동으로 발생함 1+N ..
-
-
JPA > Fetch Join , BatchSizeBackEnd/JPA 2021. 4. 27. 21:18
JPQL 에서 성능 최적화를 위해 제공하는 기능으로, 연관된 엔티티나 컬렉션을 SQL 한번에 함께 조회할 수 있다. (일반 조인 시 연관엔티티를 함께 조회하지 않고, 사용할 때 새로 select 해온다.) select m from Member m join fetch m.team => SELECT M.* , T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID 즉시 로딩과 유사하게 모든 데이터를 한 번에 Inner Join 으로 가져온다. Fetch Join 에서는 어떤 객체 그래프를 한번에 조회할 것인지 명시한 것이 다르다. 2021.04.25 - [BackEnd/자바&스프링] - JPA > 즉시로딩 , 지연로딩 에서 언급한 N +1 문제를 해결할 수 있는 방법..
-
JPA 경로표현식BackEnd/JPA 2021. 4. 27. 20:43
경로 표현식이란 .(점) 을 찍어 객체 그래프 를 탐색 하는 것을 말한다. 상태 필드, 단일값 연관 필드, 컬렉션값 연관 필드가 있다. 이들은 내부적으로 동작하는 방식, 결과가 달라져 구분해야한다. 특징 탐색 상태 필드 단순히 값만 저장하기 위한 필드 경로 탐색의 끝 x 단일값 연관 필드 연관관계를 위한 필드, 타킷이 엔티티일 때 @ManyToOne, OneToOne 묵시적 내부 조인 o 컬렉션값 연관 필드 컬렉션을 위한 필드 묵시적 내부 조인 x | o(가능) 상태필드 select m.username from Member m 단일값 연관 필드 select m.team from Member m 탐색 -> select m.team.name from Member m select o.member.team fr..
-
JPA > JPQL, 프로젝션BackEnd/JPA 2021. 4. 27. 19:11
JPA 를 사용할 때 EntityManager.find() 를 사용하면 엔티티 하나를 조회할 수 있다. 하지만 특정 조건이 있는 모든 객체를 검색하고자 할 때는 보다 복잡한 검색 방법이 필요하다. JPQL 테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체지향 쿼리 SQL 을 추상화해서 특정 벤더에 의존적이지 않다. JPA 는 JPQL 을 분석해 SQL 을 생성하고 실행한다. JPQL 은 아래와 같은 형태로 작성된다. select m from Member as m where m.age > 18 1. 대소문자 구분 Member 와 age 같은 엔티티와 속성은 대소문자를 구분한다. 2. 엔티티 이름 Member 는 클래스 명이 아니라 엔티티 명이다. 엔티티명은 @Entity(name="") 으로 지정할 수 ..
-
JPA > 값 타입BackEnd/JPA 2021. 4. 25. 20:25
JPA 타입을 크게 분류하면 엔티티 타입과 값 타입으로 분류할 수 있다. 엔티티 타입은 식별자를 통해 지속해서 추적할 수 있지만, 값 타입은 식별자가 없고 숫자나 문자같은 속성만 있으므로 추적할 수 없다. 예를 들어 회원 엔티티는 그 회원의 키나 나이 값을 변경해도 같은 회원으로 볼 수 있지만, 값 타입은 추적할 수 없다. JPA 는 기본값 타입, 임베디드 타입, 컬렉션을 값 타입을 가질 수 있다. 모든 값 타입은 값 타입을 소유한 엔티티에 생명 주기를 의존한다. 1. 기본값타입 자바 기본 타입 (Primitive) , Wrapper 클래스 , String 클래스는 JPA 의 기본값 타입이다. Primitive Type 은 복사를 하기 때문에 값이 같이 변경되지 않고, Wrapper 클래스나 String..
-
JPA > 영속성 전이와 고아객체BackEnd/JPA 2021. 4. 25. 18:37
영속성 전이 영속성 전이라는 것은 여러 관련 엔티티가 있을 때, 예를 들면 부모와 자식 엔티티에서 , 부모가 영속성 컨텍스트에 들어갈 때 자식도 함께 관리되는 것을 말한다. 부모에 자식이 여럿 있을 때 부모와 N 개의 자식을 일일이 영속성 관리를 하기 번거로우니 cascade 옵션이라는 것을 통해 한 번에 관리해 줄 수 있다. 귀찮은 일 ! Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.persist(child1); em.persist(child2); CascadeTyp..
-
JPA > 연관관계 매핑BackEnd/JPA 2021. 4. 18. 01:02
연관관계 매핑 기초 객체와 테이블간 연관관계를 맺는 차이 테이블은 FK 하나로 양방향이 되지만, (테이블은 PK, FK 연결된 키로 조인해 항상 양방향의 정보를 다 수집할 수 있다.) 객체에는 단방향만 있다. 객체에서 양방향 관계를 만들기 위해서는 각 객체가 서로의 참조를 가지고 서로를 가르키는 두 개의 단방향 갖게 해야한다. 위 표에서 객체의 연관관계는 Member 객체가 team 필드를 통해 Team 에 단방향을 갖고 있고, 테이블에서 연관관계는 MEMBER 테이블의 TEAM_ID 라는 외래키를 통해 양방향을 갖고있다고 할 수 있다. 이 때 Member.team 과 MEMBER.TEAM_ID 을 매핑하는 것이 연관관계 매핑이다. 여러 회원은 한개의 팀에만 속할 수 있다는 조건에서 회원과 팀은 N : ..