반응형 JPA18 JPA Entity 내 Subquery 로 동작하는 속성 추가 방법 @Formula JPA Entity 에서 table 에는 존재하지 않지만, 특정 속성을 추가하여 관리해야되는 경우가 있습니다.이렇 때 사용하는 것이 @Formula 이고, subqyery로 동작하게 됩니다. 예를들어 아래와 같은 테이블이 있습니다. 여기서 진행중인 프로젝트를 조회를 한다면프로젝트 시작일자 진행중이지 않은 프로젝트를 조회한다면현재일자 프로젝트 종료일자 의 조건을 설정해야 합니다. 진행중 이라는 컬럼이 있으면 단순히 Y, N 으로 조회 할 수 있을 것 같습니다.이럴 때 @Formula 를 사용하여 처리 할 수 있습니다. @Getter@Setter@Entity(name = "project")public class Project extends BaseEntity { @Id @GenericGener.. Programing/JPA 2024. 5. 8. spring boot + JPA + Tibero 연동 설정 spring boot 2.x와 JPA 설정은 다른 데이터베이스와 같습니다. 이번 포스팅에서는 살짝 차이가 있는 Tibero 연동을 주로 보도록 하겠습니다. (6.x 버전 기준) Tibero의 경우 JDBC는 Tibero 설치 경로의 /client/lib/jar 에 있는 tibero6-jdbc.jar 파일이 필요합니다. 해당 파일을 복사하여 프로젝트의 최상위 libs 폴더에 붙여넣고 gradle 에 jar 파일을 읽을 수 있도록 설정합니다. implementation fileTree(dir: 'libs', include: ['*.jar']) 그리고 spring-boot-starter-data-jdbc 의존성이 추가 되어 있다면 제거를 해줍니다. implementation 'org.springframewor.. Programing/Springboot 2023. 10. 5. JPA could not initialize proxy - no Session 원인 / 해결방법 could not initialize proxy - no Session 해당 오류는 JPA 의 open-in-view 설정과 관련이 있습니다. OSIV open-in-view는 OSIV(Open Session In View) 라 하며 영속성 컨텍스트의 범위를 설정하는 옵션입니다. JPA default 설정 값은 true 이고 영속성 컨텍스트가 트랜젝션의 범위를 넘어서 요청이 끝날 때까지 살아있게 됩니다. false 설정의 경우 트랜젝션 범위 내에서만 영속성 컨텍스트가 살아있게 됩니다. 원인 open-in-view 설정이 false 인 상태에서 트랜젝션 없이 연관관계가 FetchType.LAZY 로 설정한 객체에 접근할 때 발생. /*application.yml*/ spring: jpa: open-in-v.. Programing/JPA 2023. 8. 24. @IdClass @EmbeddedId 의 활용 차이 @IdClass @EmbeddedId 모두 JPA에서 복합 기본 키 (Composite Primary Key) 를 다루는 방법입니다. 하나의 Entity에 @Id 를 하나 이상 쓰게되면 매핑 오류가 발생하게 됩니다. 그래서 복합 기본키를 사용할 때는 별도의 키 클래스를 생성해야 합니다. 이 때 생성하는 키 클래스는 다음과 같은 특징이 있습니다. 키 클래스 특징 1. 복합 키는 별도의 키 클래스로 만들어야 한다. 2. Serializable을 implements 받아야한다. 3. equals와 hashCode를 Override 해야 한다. (lombok 에서 @EqualsAndHashCode 사용) 4. 기본 생성자가 있어야 한다. (lombok 에서 @NoArgsConstructor 사용) 5. 키 클래.. Programing/JPA 2023. 8. 18. Querydsl vs Criteria API vs QueryMethod vs JPQL 비교 이전 포스팅에서 Querydsl 을 설정하는 방법을 알아보았습니다. Link : https://aljjabaegi.tistory.com/691 Springboot 2.x + queryDSL 설정 방법 JPA를 사용하게 되면 Query method를 사용하면 간단한 조건의 작업들은 가능하지만 복잡한 쿼리로 작성되어야하는 로직의 경우 한계가 있습니다. 물론 어느정도 가능은 하겠지만 query method의 길이가 aljjabaegi.tistory.com 이번에는 JPA에서 활용되는 여러가지 방법들과 Querydsl을 비교해 보도록 하겠습니다. 샘플 쿼리에 있는 내용을 Query method, 샘플 쿼리 SELECT CD_ID , CD_NM , CD_SQNO FROM M_OP_CD WHERE GRP_CD_ID.. Programing/JPA 2023. 7. 20. Springboot 2.x + queryDSL 설정 방법 JPA를 사용하게 되면 Query method를 사용하면 간단한 조건의 작업들은 가능하지만 복잡한 쿼리로 작성되어야하는 로직의 경우 한계가 있습니다. 물론 어느정도 가능은 하겠지만 query method의 길이가 엄청나게 길어지겠죠. 이를 보완하기 위해 @Query, JPQL 를 사용하도 합니다. 하지만 문자열을 + 로 연결해야 하며 가독성도 떨어지고, 유지관리에 어려움이 있습니다. 1. Query method List findByKeyUserIdAndKeyAtndYmdBetweenOrderByKeyAtndYmd(String UseId, Date first, Date last); 2. @Query @Query(value = "select count(*)" + " from (" + " select *" +.. Programing/JPA 2023. 7. 18. JPA Date or Timestamp 저장 시 유용한 어노테이션 JPA Date or Timestamp 저장 시 유용한 어노테이션에 대해 알아보겠습니다. 1. @Temporal @Temporal 은 날짜, 시간 타입 매핑에 필수 어노테이션 입니다. TemporalType.DATE, TemporalType.TIME, TemporalType.TIMESTAMP 3가지가 있으며 각각의 컬럼 타입에 따라 설정하시면 됩니다. 2. @CreationTimestamp 신규저장 시 자동으로 현재 시간을 넣어주는 어노테이션 입니다. @Embeddable @EmbededId의 경우 정상동작 하지 않음에 주의 해야 합니다. 엔티티 클래스 필드에만 적용합니다. 3. @UpdateTimestamp @CreationTimestamp와 비슷하게 수정 시 현재 시간을 자동으로 업데이트 해주는데 사.. Programing/JPA 2023. 5. 16. JPA Query Methods 정리 오늘은 JPA에서 간단하게 우리가 원하는 데이터를 조회 할 수 있는 방법중에 하나인 Query Methods 에 대해서 알아보도록 하겠습니다. Keyword Usage JPQL Where and findByColumne1AndColumn2(col1, col2); select ... where column1 = col1 and column2 = col2 Where or findByColumn1OrColumn2(col1, col2); select ... where column1 = col1 or column2 = col2 Distinct findDistinctByColumn1(col1); select distinct ... where column1 = col1 Is, Equals findByColumn1Is.. Programing/JPA 2023. 4. 13. JPA @Query 사용 시 주의점 ERROR: relation "table_name" does not exist, ConverterNotFoundException JPA에서 데이터를 조회 할 때는 보통 find로 시작하는 Query Method를 사용하여 조회합니다. 하지만 복잡한 관계에 있는 테이블들을 사용해 조회해야 할 경우에는 직접 쿼리를 작성하여 조회하는데요, 이럴 때 사용하는 Annotation이 @Query (org.springframework.data.jpa.repository.Query) 입니다. @Query 사용법 @Query(value = "query 작성", nativeQuery = true) @Query Parameter 전달 방법 @Query(value = "select userId, userNm from user where user_id = :userId", nativeQuery = true) Optional findUser(@Param(.. Programing/JPA 2023. 4. 8. JPA Sequence 자동증가 설정 @SequenceGenerator MariaDB의 auto_increasement나 postgressql 의 serial 같은 자동증가 컬럼을 기본키로 설정하는 경우 해당 시퀀스와 컬럼을 매핑해주어야 합니다. 이럴 때 사용하는 것이 @SequenceGenerator 입니다. 1. @SequenceGenerator 속성 name : 참조할 수 있는 시퀀스 제너레이터 명칭 sequenceName : DB에서 생성한 sequence 이름 initialValue : 시퀀스 시작 값 (DDL 생성 시에만 사용) allocationSize : 시퀀스 호출 시마다 증가하는 수 catalog : DB 카탈로그 schema : DB 스키마 2. @SequenceGenerator 사용법 entity 레벨에 사용할 sequenceGenerator를 명명합니.. Programing/JPA 2023. 3. 7. JPA MapStruct, ModelMapper 설정 방법, 차이 Entity to DTO, DTO to Entity JPA 에서 Entity를 DTO로 DTO를 Entity 로 변환 해주는 2가지 라이브러리가 있습니다. MapStruct와 ModelMapper 인데요. 이번 포스팅에서는 둘의 설정방법과 차이에 대해서 알아보도록 하겠습니다. 1. 간단한 비교 springboot와 jpa 관련 설정에 대해서는 제외를 하고 진행하겠습니다. 우선 간단하게 둘의 차이를 설명드리면 이렇습니다. 종류 설정방법 속도 ModelMapper 간단 ↓에 비해 느리다 MapStruct 살짝복잡 ↑에 비해 빠르다 2.설정 2.1 ModelMapper 설정 2.1.1 gradle 의존성 주입 implementation 'org.modelmapper:modelmapper:2.4.2' 2.1.2 ModelMapper Config Class 구현 .. Programing/JPA 2023. 2. 3. JPA with Springboot, @convert date type to string or reverse JPA with Springboot, @convert date type to string or reverse DB에 Date type인 컬럼을 원하는 포멧에 맞게 변경하는 방법을 알아보겠습니다. [Spec] DB : MariaDB 10.1.13 Framework : Springboot 2.3.2 데이터를 원한는 포멧으로 변경하기 위해서는 Entity column에 Convert Annotaion을 활용합니다. Convert는 AttributeConverter를 implements한 클래스를 구현하면 됩니다. 우선 Entity를 작성해보도록 하겠습니다. [Member.class] @Entity @Table(name="M_OP_MEMBER") @Data public class Member { @Id @Col.. Programing/JPA 2021. 5. 11. JPA with Springboot, 저장, 수정, 삭제 방법, RUD JPA with Springboot, 저장, 수정, 삭제 방법, RUD 이전 포스팅에서 Springboot에서 JPA 설정 및 단일, 복수 조회, 페이징, 조건문처리 방법에 대해서 알아보았습니다. Link : aljjabaegi.tistory.com/561 JPA 설정 방법, Guide To JPA with Springboot JPA 설정 방법, Guide To JPA with Springboot 이전 포스팅에서 JPA를 왜 사용해야 하는지에 대해서 포스팅 했었습니다. Link : aljjabaegi.tistory.com/553 JPA (Java Persistance API) 란? 왜 써야하는가.. aljjabaegi.tistory.com Link : aljjabaegi.tistory.com/562 JP.. Programing/JPA 2021. 5. 7. JPA with Springboot, 조건 조회, Specification, Predicate, CriteriaBuilder JPA with Springboot, 조건 조회, Specification, Predicate, CriteriaBuilder 이번 포스팅의 코드는 아래의 Link 들의 코드에 이어 진행됩니다. 아래의 Link를 참고하세요. Link : aljjabaegi.tistory.com/562 JPA with Springboot, Entity mapping 데이터 조회 방법 JPA with Springboot, Entity mapping 데이터 조회 방법 이전 포스팅에서 JPA 설정 방법을 알아보았습니다. Link : aljjabaegi.tistory.com/561 JPA 설정 방법, Guide To JPA with Springboot JPA 설정 방법, G.. aljjabaegi.tistory.com Link :.. Programing/JPA 2021. 5. 4. JPA with Springboot, paging, sorting 방법 Pageable, Sort Sprincboot JPA paging, sorting 방법 Pageable, Sort Springboot JPA 설정 방법과 Entity mapping 방법은 아래의 Link를 참고하세요. Link : aljjabaegi.tistory.com/561 JPA 설정 방법, Guide To JPA with Springboot JPA 설정 방법, Guide To JPA with Springboot 이전 포스팅에서 JPA를 왜 사용해야 하는지에 대해서 포스팅 했었습니다. Link : aljjabaegi.tistory.com/553 JPA (Java Persistance API) 란? 왜 써야하는가.. aljjabaegi.tistory.com Link : aljjabaegi.tistory.com/562 JPA w.. Programing/JPA 2021. 5. 4. 이전 1 2 다음 💲 추천 글 반응형