CS/데이터베이스

[Android java] Room 다른 테이블이 리스트로 넘어오는 경우 JOIN하는 방법

happy_life 2022. 1. 25. 15:16

Room 다른 테이블이 리스트로 넘어오는 경우 JOIN하는 방법

 

Task 테이블이 Record 테이블의 변수로 넘어오는 구조입니다.

 

Task 테이블

 

 

Record 테이블

 

id를 통해 Record테이블과 Task테이블을 조인하고  Task의 개수를 가져오려고 쿼리를 다음과 같이 짰었습니다.

물론 저 위의 코드를 이해하시려 할 필요 없으시고 다음의 설명을 이해하시면 됩니다.

일단 저렇게 record를 저장할때 애초에 record 내부에 task list에 저장을 하는데 이게 json으로 변환되서 저장을 했습니다. 따라서 저런식으로 JOIN을 사용할 수 없습니다.

 

따라서 다음과 같이 코드를 작성해야 합니다. (Record의 변수를 참조하는 방식)

 

먼저 선택된 날의 Record를 가져옵니다.

@Query("Select * FROM record_table WHERE record_table.date LIKE :localdate")
    Record getDateRecord(LocalDate localdate);

 

이후 이런식으로 코드를 작성하였습니다. (2021-11-01)날 할 일의 목록을 가져오기. 입니다.

가져온 Record에 저장된 Tasks를 가져오는 getTasks()를 통해 <List>tasks를 가져오게 됩니다.

이를 다시 size()를 통해 길이로 바꾸었습니다.

 

기존의 Record의 변수로 들어있던 부분을 따로 때내어 저렇게 빼줄 수 있게 되었습니다.