본문 바로가기

전체 글

(115)
페치조인 특징과 한계 github 전체코드 주소(branch: fetchDetail) 별칭 사용 페치 조인 대상에는 JPA 표준 스펙 상 별칭 사용이 불가능하다. 하이버네이트에서는 사용이 가능하지만, 가급적 사용하지 않는 것이 좋다.(특히 where문에 사용 금지) JpaMain.java - 조회 로직 String query = "select distinct c from Club c join fetch c.students s where s.id
N+1과 fetch join github 전체코드 주소(branch: fetch) Club.java package hellojpa; import lombok.Data; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import java.util.ArrayList; import java.util.List; @Data @Entity public class Club { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "club") private ..
경로표현식 github 전체코드 주소(branch: JPQL/path) Student.java package hellojpa; import lombok.AccessLevel; import lombok.Data; import lombok.Setter; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Data public class Student { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; private int age; @Setter(AccessLevel.PROTECTED) @ManyToOne(fet..
JPQL 함수 github 전체코드 주소(branch: function) JPA 표준함수 JPA 표준함수(DB에 관계없이 사용가능): CONCAT, SUBSTRING, TRIM , LOWER, UPPER 등 // JPQL 표준함수 String query = "select concat('이름: ', s.name) from Student s"; List school = em.createQuery(query, String.class).getResultList(); System.out.println("student name = " + school.get(0)); JPQL 표준함수는 DB(방언)에 상관없이 사용가능하다. 실행 후 로그는 다음과 같다.(H2 DB 기준) Hibernate:select ('이름: '||student..
JPQL에서의 Enum과 조건식 Student.java package hellojpa; import lombok.AccessLevel; import lombok.Data; import lombok.Setter; import javax.persistence.*; @Entity @Data public class Student { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; private int age; @Embedded private Address address; @Setter(AccessLevel.PROTECTED) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "CLUB_ID")..
백준 2798 - 블랙잭 import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int cardsCount = scanner.nextInt(), targetNumber = scanner.nextInt(); List cards = new ArrayList(cardsCount); for(int i = 0; i < cardsCount; i++) cards.add(scanner.nextInt()); System.out.println(findClosestNumber(targe..
백준 1065 - 한수 import java.util.Arrays; import java.util.Scanner; import static java.lang.Integer.parseInt; public class Main { public static void main(String[] args) { // 백준 1065 한수 - 완전탐색 Scanner scanner = new Scanner(System.in); int count = findNumber(scanner.nextInt()); System.out.println(count); } public static int findNumber(int num) { // 99이하의 숫자는 반드시 한수이므로 num 중 99이하인 수를 기본 count로 설정 int count = num >=..
서브쿼리 JPQL에서 서브쿼리도 사용가능하다. 이 글에서는 서브쿼리가 무엇인지보다는 JPQL에서 서브쿼리를 어떻게 사용하는지에 대해 탐구해볼 것이다. JPQL 서브쿼리 // progammin부원들의 나이와 일치하는 학생 조회 String query = "select s from Student s where s.age in (select s.age from Student s join s.club c on s.club.name = 'programming')"; List students = em.createQuery(query).getResultList(); 실질적인 SQL select s from Student s where s.age in ( select s1.age from Student s1 inner join..