상세 컨텐츠

본문 제목

[spring] JPQL(Java Persistence Query Language)

캡스톤

by 정혜리 2021. 4. 6. 10:57

본문

웹프로그래밍

[JPA]

Repository Query left outer join

select b, w from Board b left join b.writer w where b.bno=:bno

- n:1 관계에서 n쪽이 left join의 왼쪽에 위치할 때는 조인 조건을 명시하지 않는다

- 조인 시 해당 클래스 타입으로 리턴하지 않고 Object로 리턴

- from절에는 table 이름이 아니라 클래스 이름 적기

- return 타입 주의하기

   return이 Object이기 때문에 사용시에도 Object타입으로 리턴

   Object => Object[] => [{bord객체}, {member객체}]

   이렇게 들어가있음

   그래서 사용할 때

   Object result = repository.getOuterJoin(100L);

   Object[] arr = (Object[])result;

   이렇게 사용하면 된다

 

---------------

select b, r from board b left join Reply r on r.board = b where b.bno = :bno

- Board : Reply = 1: n 즉 두 테이블간의 연결  정보는 N쪽인 reply에 있다

- Board쪽에는 reply로 연결되는 정보가 없기 때문에 명시적으로 조인 조건을 적어줘야 한다

- [{Board}, {Reply}]의 배열을 원소로 가지는 리스트가 반환된다

- 반환되는 리스트의 원소 수는 그 게시글의 댓글의 수와 같다

 

 

---------------------

jpql(java persistence query language)

게시글, 작성자, 댓글을 한번에 보여줘야함

게시글을 중심에 두고 조인을 해나감

 

sql

select b.*, m.name, m.email, count(r.rno)
from board b left join member m ON b.writer_email = m.email
			left join reply r on b.bno = r.board_bno;
where b.bno = 100
group by b.bno

group by 전 >> 댓글 수 만큼 쿼리 결과가 나옴

group by 후 >> 게시글 수 만큼 쿼리결과가 나옴

 

>> 다음수업에 jpa 코드 보여줌

 


 

 

tip)

Array 를 출력하려고 하면 의미 없는 값이 찍히는데(코드값)

안의 내용을 다 보려고 하면 

java util Array.toString(arr) 사용하면 배열안의 하나 하나에 toString 찍는다

 

관련글 더보기