• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

JPA 연관관계 관련하여 질문이 있습니다.

22.08.23 22:21 작성 조회수 201

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요! 영한님

설명이 어려워 예시를 들어서 설명하겠습니다.
예를 들어 이력서 테이블이 있고, 이력서_이미지라는 테이블이 있다고 가정하겠습니다.
```
이력서 table
- id(auto increment)
- 이름
- 학력
- 경력
- 등등

이력서_이미지
- id(auto increment)
- resume_id
- type(경력에 들어가는 사진인지, 학력에 들어가는 사진인지)
- 이미지 path
```
 
@Entity
public class Image {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "resume_id")
private Resume resume;

@Enumerated(EnumType.STRING)
private ImageType type;

private String imagePath;
}
 
@Entity
public class Resume {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

// 경력 사진 List
@OneToMany(mappedBy = "resume", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private List<Image> careerImages = new ArrayList<>();

// 학력 사진 List
@OneToMany(mappedBy = "resume", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private List<Image> educationImages = new ArrayList<>();
}
질문 1. 부모 객체(Resume)에서 이렇게 자식객체(Image)의 Type에 따라서 다른 list를 들고 오고 싶은데 이건 어떻게 설정하면 될까요??
- @Converter를 사용해야할까요??

질문 2. @OneToMany로 list를 들고올때 10개만 들고 오게 한다거나 이런 것도 가능할까요?

답변 1

답변을 작성해보세요.

1

안녕하세요. naeyoung.kim님

  1. JPA에서 이렇게 매핑하는 것은 지원하지 않습니다.

이 문제를 해결하려면 CarrerImage, EducationImage와 같은 식으로 별도로 풀어내야 합니다.

다른 방법으로는 Image는 하나의 컬렉션만 사용하고 찾아온 다음에 구분해서 사용하면 됩니다.

  1. 이 부분은 JPQL을 사용해서 처리하셔야 합니다.

    감사합니다.