본문 바로가기

Spring Boot

[JPA] Entity Column에 Map 사용하기

728x90

 

public class UserImageManage {

	@Id
  	@EqualsAndHashCode.Include
  	private Integer id;
    
	...

	@Fetch(FetchMode.SELECT)
	@ElementCollection(fetch = FetchType.EAGER)
	@CollectionTable(name = "user_image_mapping", joinColumns = @JoinColumn(name = "user_image_manage_id", referencedColumnName = "id"))
	@MapKeyColumn(name = "user")
	@Column(name = "image")
	private Map<Integer, Integer> userImageMap = new HashMap<>();

	...

}

 

@MapKeyColumn : Key에 사용될 컬럼

@Column : Value에 사용될 컬럼

 

Map을 컬럼으로 가지고 있는 엔티티
Mapping 테이블

 

 

Value에 List 데이터를 사용할 수도 있는데

@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "user_image_mapping", joinColumns = @JoinColumn(name = "user_image_manage_id", referencedColumnName = "id"))
@MapKeyJoinColumn(name = "user")
@Column(name = "image")
@Convert(converter = IntegerListToStringConverter.class, attributeName = "value")
private Map<Subject, List<Integer>> userImageMap = new HashMap<>();

 

@MapKeyColumn 이 아닌 @MapKeyJoinColumn을 사용해줘야 하고,

 

Value에 들어갈 데이터를 @Convert를 이용해 나열된 문자열로 변환하고 저장하면 됩니다.

 

 

 

 


박준호 / 선임연구원

Junho Park / 서비스R&D팀

 

 

junho@userinsight.co.kr

728x90