프로그래밍/JPA 18

[JPA] Order by multiple Columns

Pageable 다중 sorting 하는 방법 Pageable의 sort를 정의하는 부분에 내용만 추가해주면 됨 우선순위는 앞쪽부터 차례대로임 // 컬럼 하나 Pageable pageable = PageRequest.of(page, size, Sort.by("created").descending()); // 컬럼 여러개 Pageable pageable = PageRequest.of(page, size, Sort.by("created").descending(), Sort.Order.asc("startDate")); Sort만 따로 정의한다면? Sort sort = Sort.by( Sort.Order.asc("created"), Sort.Order.desc("startDate") );

프로그래밍/JPA 2023.02.24

[JPA] ORM이란, JPA 사용 이유?

ORM이란? ORM이란 객체와 DB의 테이블이 매핑을 이루는 것을 말함 (Java 진영에 국한된 기술이 아님) 즉, 객체가 테이블이 되도록 매핑 시켜주는 것 ORM을 이용하면 SQL Query가 아닌 직관적인 코드(메서드)로서 데이터를 조작할 수 있음 예를들어, User 테이블의 데이터를 출력하기 위해서 MySQL에서는 SELECT * FROM user; 라는 query를 실행해야 하지만, ORM을 사용하면 User 테이블과 매핑된 객체를 user라 할 때, user.findAll() 라는 메서드 호출로 데이터 조회가 가능 query를 직접 작성하지 않고 메서드 호출만으로 query가 수행되다 보니, ORM을 사용하면 생산성이 매우 높아짐 그러나 query가 복잡해지면 ORM으로 표현하는데 한계가 있고,..

프로그래밍/JPA 2023.01.10

[JPA] JPA 날쿼리 사용하기(nativeQuery = true)

jpa 날쿼리 사용하기 위한 방법 nativeQuery 속성 true로 변경 sql의 함수를 사용하고 싶은데 jpql로 어떻게 바꿀까하다가 날쿼리를 사용해보기로 함 아래와 같이 사용 가능 @query(value = "...", nativeQuery = true) @query(value = "select group_concat(sc.이메일) " + "from student st inner join school sc on st.학교번호 = sc.학교번호 " + "where st.학생이름 = :학생이름", nativeQuery = true)

프로그래밍/JPA 2022.12.29

[JPA] jpa delete 안됨

jpa delete 안되는 문제 코드를 살펴보면 보통 delete 후에 insert 하는 작업이 있는 경우 delete가 작동안하게 됨 update가 안되는 경우도 아래의 해결방법과 원인을 살펴보기 해결 방법 repository.flush()로 date 반영해준 뒤 insert 작업하기 👉 순서상 insert 가 먼저 실행되기에 delete가 적용 안될 수 있음 delete -> flush -> insert 순으로 실행하기 원인 hibernate에서 동작하는 SQL 순서가 정해져 있기 때문 hibernate 레퍼런스를 찾아보면 작업 순서가 정확하게 나와있음 @Transactional이 있기 때문에 함수 종료시 쿼리문들이 한꺼번에 실행되는데 이때 insert가 먼저 실행되고 delete가 마지막에 실행되기..

프로그래밍/JPA 2022.11.14

[JPA] JPA란?

JPA란? Java Persistence API의 약자로 자바의 ORM(Object Realational Mapping) 표준 스펙을 정의 JPA의 스펙은 자바의 객체와 데이터베이스를 어떻게 매핑하고 동작해야 하는지를 정의하고 있음 하이버네이트(Hibernate) ORM Framework 중 하나로 'JPA 프로바이더'라고도 부름 JPA의 실제 구현체 중 하나이며, 현재 JPA 구현체 중 가장 많이 사용됨 영속성 컨텍스트(Persistence Context) 영속성 컨텍스트는 JPA가 관리하는 엔티티 객체의 집합 엔티티 객체가 영속 컨텍스트에 들어오게 되면 JPA는 엔티티 객체의 매핑 정보를 가지고 DB에 반영함 엔티티 객체가 영속 컨텍스트에 들어오게 되어 관리 대상이 되면 그 객체를 영속 객체라고 부름..

프로그래밍/JPA 2022.09.28

[JPA] 복합 키 매핑하는 방법(@IdClass)

@IdClass를 사용하여 복합 키 매핑하기 JPA는 영속성 컨텍스트에 엔티티를 보관 시, 식별자를 사용하고 이를 구분하기 위해 equals와 hashcode를 사용해 비교함.이때 식별자가 2개 이상이면 별도의 식별자 클래스를 만들고 그곳에 equals와 hashcode를 구현해야 함. @IdClass 방식과 @EmbeddedId 방식 중 @IdClass 방식 예제를 살펴보자 1️⃣ Id Class 생성하기DiaryId.java 파일 👇 @AllArgsConstructor @NoArgsConstructor public class DiaryId implements Serializable { private static final long serialVersionUID = 1L; private int diar..

프로그래밍/JPA 2022.08.16