✏️ nativeQuery = false 사용법
@Query(value = " SELECT u FROM User u ", nativeQuery = false)
List<User> example();
@Query : 직접 Query로 조회 가능
u : select u.* from user u 에서 u.*에 해당
User : 객체, 직접 query로 조회할 때는 테이블 명이 users이지만 JPA에서는 User객체로 조회
, nativeQuery = false : false일 때 생략 가능
List<User> : 조회된 객체 자체의 List로 받을 수 있음
✏️ nativeQuery = true와 다른점?
→ 진짜 쿼리이기때문에 조회할 때 조금씩 다르다
@Query(value = " SELECT * FROM users u ", nativeQuery = true)
List<User> example();
* : u → *
users : User → users
, nativeQuery = true: true일 때 생략 불가능
✏️ 또 다른 예시
- Board 객체 안에 User 객체가 연관되어있을 때
@Query(value = " SELECT b.user.id FROM Board b ")
b.user.id : Board 객체의 User객체 안의 id컬럼을 가져옴
@Query(value = " SELECT b.user_id FROM Board b ", nativeQuery = true)
b.user_id : board 테이블에 fk인 user_id 컬럼을 가져옴
✏️ nativeQuery = false일 때 Dto로 받고 싶다면?
@Query(value = " select new com.example.emotrak.dto.DailyMonthResponseDto( d.id, d.day, d.emotion.id, d.detail )"
+ " from Daily d "
+ " where d.year = :Year ")
List<DailyMonthResponseDto> getDailyMonth(@Param("Year") int year);
new : 조회 결과로 Dto를 생성
com.example.emotrak.dto.DailyMonthResponseDto : 생성할 Dto와 그 경로
d.id, d.day, d.emotion.id, d.detail : 생성자에 해당하는 매개변수를 작성
d.emotion.id : 위의 또 다른 예시처럼 이것은 emotion테이블의 id 컬럼임
:Year : 변하는 값을 정의
@Param("Year") int year : 변하는 값에 넣어줄 변수 변하는 값의 : 뒷부분과 @Param 내부 똑같이 맞추기
✏️ nativeQuery = true일 때 Dto로 받고 싶다면?
https://pingu514.tistory.com/67
'개발일기 > Java' 카테고리의 다른 글
nativeQuery select in 적용하기 (0) | 2023.04.11 |
---|---|
nativeQuery 원하는 Dto로 가져오기 (0) | 2023.04.11 |
IntelliJ 테스트 코드 한글 깨짐 현상 해결 (0) | 2023.03.30 |
JPA Query 사용하기 (0) | 2023.03.23 |
Cors 에러가 뜨는 이유와 해결 (0) | 2023.03.20 |