[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 |