티스토리 뷰
엔티티를 수정하거나 건드렸으면 반드시
maven > lifecycle > compile 해주어야 함.
이거를 해줘야 쿼리dsl에서 생기는 Q엔티티들이 생긴다.
fetch는 list
fetchOne은 해당 타입으로 결과가 하나가 나옴
DTO로 리턴하는 방법
화면에서는 엔티티를 사용하면 안됨. 엔티티는 서비스단까지 사용하는 것임.
서비스의 리턴타입은 dto여야 함.
서비스에서의 리턴타입은 dto
엔티티는 서비스 메소드안에서만 쓰고 결과는 dto로 나와야 함.
dto로 화면에 나와야 함. 엔티티가 나가면 오류생김.
엔티티를 기준으로 결과를 조회했을 때 조회한 결과를 바로 DTO에 넣어서 DTO로 리턴을 한다.
jpql에서는 직접 소속을 다 알려줘야 함.
위 과정을
queryDsl은 dto에 생성자위에 @QueryProjection붙이면 된다.
쿼리dsl
서비스->컨트롤러->화면
컨트롤러에서 화면으로 보낼 때에는 DTO를 써야 함.
하나의 엔티티 당 하나의 DTO가 필요하다.
select에 들어가는 애들(ownerid)을 projection라고 함. rdb에서의 용어
projection : select해서 조회하는 컬럼하나를 projection이라고 한다.
projections : 여러개니까 s를 붙인다.
생성자를 사용해서 전달하겠다. > 생성자는 DTO클래스 안에 있다.
여기서는 컴파일 오류가 안난다.
2번 방법) 어노테이션 붙이기
쿼리프로젝션을 쓰려면 컴파일 해주기>>그래야 DTO도 빌드가 되어서 dsl도 알 수가 있음.
컴파일 성공 시,
Q엔티티는 target > generated-class > java > 똑같은 경로 > 확인 가능
new Q~DTO를 쓰면 됨 >> 여기서 오류가 나면 compile오류가 난다.
실행하고 나서 runtimeexception이 뜨는 것이 안 좋은데, 그 전에 문법오류인 컴파일러가 검사할 수 있는 단계에서 작업을 쳐주는 게 좋다. 실행하기 전에 오류를 발견하는 것이 좋다..
어노테이션을 쓰면 그게 가능하다. 매칭이 안되니까 빨간 줄 뜨고 실행되기 전에 오류라고 뜬다.
실행하기 전에 컴파일을 꼭 해야 한다..!! 수정하면 컴파일을 해야 한다..!!
'2022 > jpa' 카테고리의 다른 글
day07[builder패턴] (0) | 2022.12.01 |
---|---|
day06[queryDSL-3] (0) | 2022.12.01 |
day06[queryDSL-1] (0) | 2022.12.01 |
day06[jpa, mybatis 연동] (0) | 2022.12.01 |
day05[다대일 양방향 관계] (0) | 2022.12.01 |