본문 바로가기

전체 글502

34. JPQL - 다형성 쿼리, Entity 직접 사용, Named 쿼리 0. 개요 - 이번 포스팅에서는 유용한 JPA의 기능 몇 가지를 알아보도록 하자. 1. 다형성 쿼리 a) 다형성 쿼리란? - 다형성 쿼리는 상속 관계에서 사용할 수 있는 기능이다. - 부모 객체를 통해 특정 자식 객체를 조회할 때 사용하는 기능이다. b) 다형성 쿼리 사용 방법 - 예를 들어, Food라는 부모 객체가 있고 하위에 Beverage, Snack이 있다고 해보자. - Food 객체를 통해 Snack 객체를 조회하고 싶은 경우, 다음과 같은 JPQL을 작성할 수 있다. SELECT f FROM Food f WHERE TYPE(f) IN(Snack); - 위의 JPQL은 다음과 같은 SQL로 번역되어 DB에게 전달된다. SELECT f FROM Food f WHERE f.DTYPE IN ('Sn.. 2022. 5. 7.
33. JPQL - Fetch Join의 한계 0. 개요 - 이번 포스팅에서는 Fetch Join의 한계에 대해서 알아보자. 1. Fetch Join의 한계 - Fetch Join 사용 시, 하지 못하는 것 또는 하면 안 되는 것에 대해서 알아보자. a) 별칭, Where 절 사용 금지 - Fetch Join을 사용할 때에는 별칭과 Where 절을 사용하지 않는 것을 권장한다. - 첫 번째 이유는 Fetch Join의 역할 또는 정의를 위배하기 때문이다. - Fetch Join은 연관된 Entity를 모두 조회한다는 정의를 가지고 있다. - 그러나 Where 절을 통한 필터링은 Fetch Join의 결과 값에 변화를 주게 된다. - 즉, 연관된 Entity를 모두 조회한다는 역할이 필터링을 사용함으로써 변질되는 것이다. - 두 번째 이유는 데이터 무.. 2022. 5. 6.
LeetCode 77(Combinations, java) 0. 문제 https://leetcode.com/problems/combinations/ Combinations - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 1. 문제 설명 - 문제에서 정수 n과 k가 주어진다. - 1부터 n까지의 수를 이용하여 중복 없이 k개의 짝을 이루는 모든 조합을 구하는 것이 문제의 핵심이다. 2. 문제 해설 a) 첫 번째 접근 - 이 문제는 전형적인 back tracking 문제다. - back tracking은 정답에 부합하는 .. 2022. 5. 6.
LeetCode 994(Rotting Orange, java) 0. 문제 https://leetcode.com/problems/rotting-oranges/ Rotting Oranges - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 1. 문제 설명 - 문제에서 이중 배열(grid)이 주어진다. - 이중 배열에는 빈 공간(= 0), 신선한 오렌지(= 1), 상한 오렌지(= 2)와 같은 3가지 값이 저장되어있다. - 상한 오렌지에 인접한 신선한 오렌지는 1분이 지날 때마다 상한다. - 인접한 오렌지 중 상한 오렌지가 존재하.. 2022. 5. 6.
32. JPQL - Collection Fetch Join과 Distinct * 본 포스팅은 이전 포스팅과 이어지는 내용입니다. 0. 개요 - 이전 포스팅에서 사용한 Player와 Team Entity를 동일하게 사용할 예정이다. - 이전 포스팅에서 Fetch Join의 기본 개념과 ManyToOne 관계에서의 Fetch Join을 알아보았다. - 이번 포스팅에서는 ManyToMany 관계 또는 Collection 필드의 Fetch Join을 알아보자. 1. Collection Fetch Join - ManyToMany 관계 또는 Collection 필드를 JOIN 할 때에는 중복 데이터가 발생한다. - 사실 DB의 관점에서는 중복 데이터는 존재하지 않는다. - 그러나 JPA의 관점에서는 중복 객체가 발생한다. - 어떤 문제가 있는지, 문제의 원인과 해결 방법이 무엇인지 알아보자.. 2022. 5. 5.
31. JPQL - Fetch Join 개념 0. 개요 - 이번 포스팅은 JPQL의 주요 기능 중 하나인 Fetch Join에 대해서 알아보자. - Fetch Join을 설명하기 위해 다음 Entity를 예시로 사용할 예정이다. @Entity public class Player { @Id @GeneratedValue private Long id; private String name; private String position; private int age; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; // Getter & Setter 생략 } @Entity public class Team { @Id @GeneratedValue private L.. 2022. 5. 4.
30. JPQL - 경로 표현식과 묵시적 JOIN 0. 개요 - 이번 포스팅에서는 경로 표현식과 묵시적 JOIN에 대해서 알아보자. - 설명을 위해 다음 객체를 사용할 예정이다. @Entity public class Player { @Id @GeneratedValue private Long id; private String name; private String position; private int age; @Embedded private Address address; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; // Getter & Setter 생략 } @Entity public class Team { @Id @GeneratedValue priva.. 2022. 5. 3.
29. JPQL - 사용자 정의 함수 0. 개요 - SQL에서 함수를 사용하듯, JPQL에서도 다양한 함수를 사용할 수 있다. - JPA를 사용하기 때문에 DB에 종속되지 않고 JPQL에서 제공하는 다양한 함수를 사용할 수 있다. - 기본 함수만을 가지고 해결하지 못하는 경우, 특정 DB에서 제공하는 함수를 가져와 사용할 수 있다. - 이때 사용자 정의 함수를 사용한다. - 이번 포스팅에서는 JPQL이 제공하는 기본 함수와 사용자 정의 함수에 대해서 알아보자. 1. 기본 함수 - JPQL에서 제공하는 기본 함수는 다음과 같다. → CONCAT, SUBSTRING, TRIM, LOWER, UPPER → LENGTH, LOCATE, ABS, SQRT, MOD, SIZE, INDEX - JPQL에서 제공하는 기본 함수의 사용 방법에 대해서 간단히.. 2022. 5. 2.
LeetCode 542(01 Matrix, java) 0. 문제 https://leetcode.com/problems/01-matrix/ 01 Matrix - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 1. 문제 설명 - 문제에서 이중 배열(mat)이 주어진다. - 이중 배열의 원소 중 1이 입력된 위치를 찾고, 해당 위치부터 0까지의 최단 거리를 찾아낸다. - 최단 거리가 잘못 입력된 원소를 수정하여 올바른 값을 가진 이중 배열을 반환하는 것이 이 문제의 핵심이다. 2. 문제 해설 - 글쓴이는 이 문제를 풀기.. 2022. 4. 30.
LeetCode 116(Populating Next Right Pointers in Each Node, java) 0. 문제 https://leetcode.com/problems/populating-next-right-pointers-in-each-node/ Populating Next Right Pointers in Each Node - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 1. 문제 설명 - 문제에서 완전 이진트리(root)가 주어진다. - 모든 노드는 next 속성이 있는데, 이는 우측 노드를 가리키는 포인터 역할을 한다. - 모든 노드의 next 값은 nul.. 2022. 4. 29.
28. JPQL - case 식 0. 개요 - 이번 포스팅에서는 JPQL에서 사용할 수 있는 case 식에 대해서 알아보자. 1. Case 식의 종류 a) 기본 CASE - 예시를 통해 기본 case 식의 형태를 알아보자. SELECT CASE WHEN p.age = 35 THEN '노장' ELSE '현역' END FROM Player p; - 기본 case 식은 비교 대상에 대해서 조건을 부여할 수 있다. - 자바에서 사용하는 switch case 문과 동일한 원리로 작동한다. b) 단순 CASE - 예시를 통해 단순 case 식의 형태를 알아보자. SELECT CASE l.name WHEN 'leagueA' THEN '1부리그' WHEN 'leagueB' THEN '2부리그' ELSE '3부리그' END FROM League l; .. 2022. 4. 28.
LeetCode 617(Merge Two Binary Trees, java) 0. 문제 https://leetcode.com/problems/merge-two-binary-trees/ Merge Two Binary Trees - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 1. 문제 설명 - 문제에서 이진트리 2개(root1, root2)가 주어진다. - 두 이진트리를 병합하여 하나의 이진트리를 반환하는 것이 문제의 핵심이다. 2. 문제 해설 a) 첫 번째 접근 - 이 문제는 두 트리의 노드를 탐색하여, 각 노드의 값을 병합하는 과정을.. 2022. 4. 28.