@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Study {
// ...
@OneToMany(
mappedBy = "study",
cascade = {CascadeType.PERSIST, CascadeType.REMOVE},
orphanRemoval = true
)
private List<Image> images = new ArrayList<>();
// ...
}
위처럼 Study 엔티티에 선언되어 있었는데, List<Image>를 Images로 묶고 싶어졌다. 이때 Images는 List<Image>를 갖는 일급 컬렉션이다. 근데 엔티티 안에 일급 컬렉션을 넣는 경우는 처음이라 어떻게 해야 할지 찾아봤다.
그냥 Embedded 하면 된다.
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Study {
// ...
@Embedded
private Images images;
// ...
}
Study 엔티티에 있던 List<Image>를 Imges로 바꾼 후 @Embedded를 붙여준다.
그리고 기존에 있던 OneToMany를
@Embeddable
@NoArgsConstructor(access = AccessLevel.PUBLIC)
public class Images {
@OneToMany(
mappedBy = "study",
cascade = {CascadeType.PERSIST, CascadeType.REMOVE},
orphanRemoval = true
)
private List<Image> images = new ArrayList<>();
}
이렇게 Images로 넘겨주었다. 이때 @Embeddable도 꼭 붙여줘야 된다.
@Entity
@NoArgsConstructor(access = AccessLevel.PUBLIC)
public class Image {
// ...
@ManyToOne
@JoinColumn(name = "study_id")
private Study study;
// ...
}
그럼 기존 Image 엔티티는 건드리지 않고 Study의 이미지 리스트를 일급 컬렉션으로 묶을 수 있게 된다.
'Dev > JPA' 카테고리의 다른 글
[JPA] @Embedded, @Embeddable 의 필요성 (1) | 2023.12.28 |
---|