JPA(13)
-
더티체킹 Setter 없이 구현하기
JPA를 사용하게 되면 추가, 수정, 삭제, 조회 중 수정 부분이 크게 다른데, 수정의 경우 쿼리에 관한 코드가 따로 없다. 수정은 JPA에서 트랜잭션이 끝나는 시점에 변화가 있는 모든 엔티티 객체를 데이터베이스에 자동으로 반영해 줄 때 일어난다. 김영한 님의 스프링 강의를 들을 때 나는 처음으로 더티체킹을 알았다. 영한님의 강의에서 데이터를 수정하기 위해 setter를 이용하였지만 이는 강의의 편의를 위해 열어둔 것으로 기본적으로 setter를 열어두게 되면 문제가 발생할 여지가 있다고 하였다. 이번 프로젝트에서는 이러한 문제를 예방하고자 setter를 생성하지 않고 수정을 구현했는데, 계속 수정이 이루어지지 않아 애먹었다. 빌더 클래스 이용하기 Diet diet = Diet.builder() .foo..
2023.07.29 -
[JPA] JPQL 사용해보기
JPQL 관련 글 2023.03.25 - [JAVA & SPRING/JPA] - [JPA] JPQL를 사용하는 이유 조인 내부 조인 SELECT m FROM Member m [INNER] JOIN m.team t 외부 조인 SELECT m FROM Member m LEFT [OUTER] JOIN m.team t 세타 조인 select count(m) from Membe r m, Team t where m.username = t.name ON 절 ON절을 활용하면 조인 대상을 필터링할 수 있고 연관관계 없는 엔티티를 외부에서 조인 가능하다. 1. 조인 대상 필터링 예) 회원과 팀을 조인하면서, 팀 이름이 A인 팀만 조인 // JPQL: SELECT m, t FROM Member m LEFT JOIN m.t..
2023.03.25 -
[JPA] JPQL를 사용하는 이유
객체지향 쿼리 언어(JPQL) JPA는 다양한 쿼리 방법을 지원한다. JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL JPA를 사용하면 엔티티 객체 중심으로 개발이 이루어지는데, 검색할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야 한다. 그러나 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하고 결국 검색 조건이 포함된 SQL이 필요하다. JPQL은 엔티티 객체를 조회하는 객체 지향 SQL로 기존의 SQL과 문법이 비슷하다. (SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원) // 검색 String jpql = "select m From ..
2023.03.25 -
[JPA] 상속 관계는 어떻게 매핑해야 할까?
객체에는 상속이라는 개념이 있지만 관계형 데이터베이스에는 상속관계가 존재하지 않는다. 대신 관계형 데이터베이스에는 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 여기서 말하는 상속관계 매핑이란 객체의 상속과 구조와 데이터베이스의 슈퍼타입 및 서브타입 관계를 매핑하는 것이다. 슈퍼타입, 서브타입을 실제 물리 모델로 구현하는 방법 조인 전략: 각각 테이블로 변환 단일 테이블 전략: 통합 테이블로 변환 구현 클래스마다 테이블 전략: 서브타입 테이블로 변환 *객체 입장에서는 어떤 방식으로 구현하든 상관없이 다 매핑 가능하다. 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABL..
2023.03.25 -
[JPA] 엔티티 타입 알아보기
타입 엔티티 타입 값 타입 기본 값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type, 복합 값 타입) 컬렉션 값 타입(collection value type) 엔티티 타입 @Entity로 정의하는 객체로 데이터가 변해도 식별자로 지속해서 추적이 가능하다. 예를 들어 회원이라는 엔티티가 존재할 때 키나 나이 값을 변경해도 식별자로 인식 가능하다. 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체로 식별자가 없고 값만 있기 때문에 변경 시 추적이 불가능하다. 예를 들어 int 변수 값으로 숫자 100이 담겨 있다고 할 때 200으로 변경하면 완전히 다른 값으로 대체된다. 기..
2023.03.25 -
[JPA] 연관관계 매핑 더 깊게 파해쳐보기
연관관계 매핑 시 고려사항 다중성(다대일, 일대다, 일대일, 다대다) 단방향, 양방향 연관관계 주인 다대일[N:1] 다쪽이 가장 외래 키를 가지고 있으며 연관관계의 주인이다. 다대일 관계의 반대 방향은 항상 일대다 관계이며 가장 많이 사용하는 연관관계이다. 단반향 연관관계 // Member class @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team 양방향 연관관계 // Member class(연관관계 주인) @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team // Team class @OneToMany(mappedBy = "team") private List members = new ArrayL..
2023.03.25