[JPA] JPA Entity Id를 String 으로 설정하기
2023. 4. 10. 23:08
프로그래밍/JPA
JPA Entity Id를 String 으로 설정하기 사실 entity id 를 String 타입으로 설정할 수 있는가? 에 대해 너무 당연하게 생각할 수도 있으나 조회시에 repository 설정때문에 못찾는 경우를 봤기에 이렇게 작성하게 되었음 Entity에 Id를 String 타입으로 설정하기 String 타입 외에 어떤 타입이든 설정 가능(물론 복합키도 가능함) 그러나 findById를 통해 조회 시에 Long 타입으로 찾아야 한다고 뜬다면? Repository 설정을 찾아보자 아마 JpaRepository 를 상속받는 부분을 보면 이유를 찾을 수 있을 것임 위의 코드에서 보면 MemberRepository는 JpaRepository 인터페이스를 상속받음 이때, Member는 엔티티 클래스이고, ..
[JPA] 복합키 설정 방법(@EmbeddedId, @IdClass)
2023. 3. 28. 20:03
프로그래밍/JPA
복합키 설정 방법은 크게 두가지가 있음 1. @EmbeddedId 어노테이션 사용 2. @IdClass 어노테이션 사용 @EmbeddedId 어노테이션 사용 복합키를 가진 엔티티 클래스에서는 복합키를 위한 별도의 클래스를 만들어야 함 이 클래스에 복합키를 구성하는 필드들을 선언하고, @Embeddable 어노테이션을 붙여줌 그리고 이 클래스를 엔티티 클래스에서 @EmbeddedId 어노테이션을 사용하여 참조 예시 public class OrderProduct { @EmbeddedId private OrderProductId id; @Embeddable public class OrderProductId implements Serializable { @Column(name = "order_id") priva..
[JPA] Order by multiple Columns
2023. 2. 24. 20:18
프로그래밍/JPA
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] ORM이란, JPA 사용 이유?
2023. 1. 10. 20:15
프로그래밍/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] JPA 날쿼리 사용하기(nativeQuery = true)
2022. 12. 29. 21:29
프로그래밍/JPA
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] jpa delete 안됨
2022. 11. 14. 20:26
프로그래밍/JPA
jpa delete 안되는 문제 코드를 살펴보면 보통 delete 후에 insert 하는 작업이 있는 경우 delete가 작동안하게 됨 update가 안되는 경우도 아래의 해결방법과 원인을 살펴보기 해결 방법 repository.flush()로 date 반영해준 뒤 insert 작업하기 👉 순서상 insert 가 먼저 실행되기에 delete가 적용 안될 수 있음 delete -> flush -> insert 순으로 실행하기 원인 hibernate에서 동작하는 SQL 순서가 정해져 있기 때문 hibernate 레퍼런스를 찾아보면 작업 순서가 정확하게 나와있음 @Transactional이 있기 때문에 함수 종료시 쿼리문들이 한꺼번에 실행되는데 이때 insert가 먼저 실행되고 delete가 마지막에 실행되기..
[JPA] JPA란?
2022. 9. 28. 20:21
프로그래밍/JPA
JPA란? Java Persistence API의 약자로 자바의 ORM(Object Realational Mapping) 표준 스펙을 정의 JPA의 스펙은 자바의 객체와 데이터베이스를 어떻게 매핑하고 동작해야 하는지를 정의하고 있음 하이버네이트(Hibernate) ORM Framework 중 하나로 'JPA 프로바이더'라고도 부름 JPA의 실제 구현체 중 하나이며, 현재 JPA 구현체 중 가장 많이 사용됨 영속성 컨텍스트(Persistence Context) 영속성 컨텍스트는 JPA가 관리하는 엔티티 객체의 집합 엔티티 객체가 영속 컨텍스트에 들어오게 되면 JPA는 엔티티 객체의 매핑 정보를 가지고 DB에 반영함 엔티티 객체가 영속 컨텍스트에 들어오게 되어 관리 대상이 되면 그 객체를 영속 객체라고 부름..
[JPA] org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property 해결 방법
2022. 8. 24. 20:17
프로그래밍/JPA
org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property 해결 방법 import java.sql.Date; 를 import java.util.Date; 로 변경