Database ( DB )/JPA, Querydsl 18

Spring boot JPA에서 DB 예약어를 column으로 사용하는 방법

안녕하세요 노루아부지 입니다. 이번에 새로운 java 프로그램을 JPA로 개발하던 중, 예약어로 인해 에러가 발생했습니다. 저희 회사에서는 mssql, mariadb, oracle 이렇게 3개의 Database를 사용하는데요. 문제는 이전 담당자가 테이블의 칼럼명으로 "type"이라는 단어를 사용을 한 것이었습니다. 이 단어는 oracle의 예약어인데, 이미 고객사에 설치가 된 상황이어서 칼럼명을 이제 와서 바꿀 수 없는 상황이었습니다. (기존에는 Mybatis 사용) Spring boot JPA를 사용하며 Database 예약어를 column으로 사용하는 방법을 찾아보았습니다. (물론 예약어를 사용하지 않는 것이 제일 좋은 방법입니다.) 목차 1. Database 별 예약어 2. Spring boot ..

Spring JPA selecting specific columns

JPA에서 기본으로 제공하는 findById(), findAll() 등을 사용하면 기본적으로 모든 컬럼을 select합니다. 만약, 특정 컬럼을 구하려고 할 경우 아래와 같이 하면 됩니다. 먼저, 아래와 같은 User Entity가 존재한다고 가정합니다. @Entity @Getter @Setter public class User { @Id private String userId; private String userName; private Integer age; } 1. nativeQuery 사용 import com.example.demo.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springfr..

No identifier specified for entity

nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.snowdeer.database.board.Member 만약 위와 같은 오류가 발생한다면 Entity 클래스의 @Id 어노테이션이 없거나, 잘못된 것입니다. import lombok.Getter; import lombok.Setter; import javax.persistence.Entity; import javax.persistence.Id; @Entity @Getter @Setter public class User { @Id private String userId; private String userName; private Integ..

jpa] @CreatedDate annotation이 동작하지 않는 경우

jpa에서 @CreateDate는 DB에 insert를 할 때 자동으로 현재 시간을 넣어주는 annotation입니다. 보통 이것을 사용할 때 아래와 같이 사용하는데요 @Getter @Setter @Entity @EntityListeners(AuditingEntityListener.class) public class User { /* 생략 */ @CreateDate private LocalDateTime createDate; } 이렇게 했는데 @CreateDate가 동작하지 않는다면 Configuration class에 @EnableJpaAuditing annotation을 추가하면 됩니다.

[Querydsl] 동적으로 where 만들기

먼저, 여기에서 말하는 동적 where는 아래와 같은 where절을 의미합니다. WHERE userName = '홍길동' AND ( age = 24 or telno = '010-1111-2222' ) Querydsl에서는 BooleanBuilder를 사용하여 이와 같은 복합 검색조건을 만들 수 있습니다. 방법 1) and를 기준으로 괄호를 구분 ( and가 나오면 새로운 괄호의 시작 ) ex) and roleCode = 1 and ( roleName = 2 or roleDesc = 3 ) String temp = "{\"keyword_0\":{\"selectType\":\"roleCode\",\"andOr\":\"and\",\"select\":\"ROLE-000\",\"input\":\"\",\"rule..

[Querydsl] CASE WHEN 사용하기

Querydsl에서 CASE WHEN을 사용하기 위해서는 CaseBuilder()를 사용하면 됩니다. 사용 방법은 아래를 참고하시면 됩니다. 예1) Expression cases = new CaseBuilder() .when(c.annualSpending.gt(10000)).then("Premier") .when(c.annualSpending.gt(5000)).then("Gold") .when(c.annualSpending.gt(2000)).then("Silver") .otherwise("Bronze"); 예2) import static kr.com.wow.QTbUser; // 클래스 및 함수 선언부 생략 JPAQuery query = jpaQueryFactory .from(tbUser) .select(..

728x90
loading