[JPA] Id Annotation과 return cached data


JPA로 Query method를 작성해 사용하던 도중 이상함을 느꼈습니다.



List<UserTrack> findAll();



예를 들어 위와 같은 Query method를 사용하여 쿼리를 작성하여 사용했는데 이상하게 같은 데이터를 중복, 반복해서 return 하는 현상이 일어났습니다.

해당 문제는 Entity에서 @Id Annotation을 건 컬럼이 DB Table에서 유니크한 값을 가지고 있지 않은 경우에 발생합니다.



@Entity
public class UserTrack {
@Id
private Long age;

private String name;
}



만약 위와 같이 @Id Annotation을 걸었는데 테이블에서 해당 컬럼의 데이터가 중복될 경우 애매하여 이전에 찾아서 Cache 되었던 data가 있는지 찾습니다.


이를 해결하려면 


1. 해당 테이블의 PK에 Id Annotation을 겁니다.

2. PK가 없을 경우에는 EmbeddedId 를 만들어 복합키로 유니크한 Id를 만들어 줍니다.


이렇게 하면 제대로 select 해서 return 하는 것을 확인할 수 있습니다.



'Database > JPA & JPQL' 카테고리의 다른 글

JPA JsonMappingException: Infinite recursion (StackOverflowError) - 무한루프  (0) 2018.08.02
Pageable로 Limit 걸기  (0) 2018.06.23
JPQL이란?  (0) 2018.06.18

+ Recent posts