JPA 40

DB 함수 호출

DB 함수 호출을 위해서는 방언(Dialect) 설정이 필요하며, 각 DB 마다 제공하는 함수명, 동작이 다르기 때문에 방언 사용시 서비스별 DB에 맞춰 수정이 필요하다. 방언 Class 지정 (Application.yml) 방언 Class에 선언된 사용 가능한 함수 확인 방언 class에 등록된 함수 외에 함수를 사용하기 위해선 CustomDialect를 구현하면 된다. 참고 https://055055.tistory.com/83 JPA Dialect 김영한님의 강의 내용 정리, oracle dialect 상속 및 사용자 함수 추가 Dialect? 표준 SQL인 ANSI SQL외에, DBMS인 Oracle, MySQL, MS-SQL, PostgreSQL마다 문법과 함수가 조금씩 다른 경우가 있다. 이러한..

JPA/queryDsl 2021.03.22

JPA TOP1 사용법

방법 1. FirstN, TopN을 통해 TOPN 쿼리를 호출한다. @Repository public interface AaaRepository extends JpaRepository { AaaEntity findTop1ByFlagEqualsOrderByCreatedAtDesc(Integer flag); AaaEntity findFirst1ByFlagEqualsOrderByCreatedAtDesc(Integer flag) } 방법 2. Pageable을 사용하여 Top 쿼리를 호출한다. 호출 후 List.get(0)을 사용해서 가져와야한다. 해당 방법은 JPQL 사용시에도 동일하게 적용된다. @Repository public interface AaaRepository extends JpaRepositor..

JPA/JPA 2021.03.15

JPA Enum Mapping

JPA 사용시 컬럼값에 Enum을 자동 매핑하기 위한 방법을 소개한다. Enum에서 상속받는 interface 구현 public interface BaseEnumCode { T getValue(); } Enum 클래스 생성 @Getter @AllArgsConstructor public enum ContentSourceEnum implements BaseEnumCode { news("뉴스", "news"), videoNews("포토/동영상 뉴스", "videoNews"), normal("일반", "normal"); private String name; private String value; } Code 값을 Enum으로 자동 매핑해주는 클래스 생성 public abstract class AbstractBa..

JPA/JPA 2021.03.15

insert, update, delete 주의 사항(쿼리 실행 순서)

쿼리 동작 우선 순위 Hibernate는 영속성 컨텍스트에 등록된 쿼리에 대해 아래와 같은 우선 순위에 맞춰 쿼리가 실행되도록 되어있다. 로직을 다음과 같이 구현하는 경우 flush를 반드시 사용해야 원하는 대로 동작한다. find, remove, update, insert 순으로 로직이 구현된 경우 > Hibernate는 find, update, insert, remove 순서로 쿼리를 실행하므로 원하지 않는 결과가 발생한다. 쿼리 실행 순서 1. Inserts, in the order they were performed 2. Updates 3. Deletion of collection elements 4. Insertion of collection elements 5. Deletes, in the o..

JPA/JPA 2020.11.11