일부러 int type 기재 란에 ‘qqq’나 작성해야 만나는 줄 알았던 Type mismatch error를 Entity를 적용하고 나서 만나게 되었다.
// 아티클 엔티티
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity(name = "ARTICLE")
public class ArticleEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false, length = 20)
private String title;
@Column
private String text;
@ManyToOne // 다수가 한개로 매핑됨. (글이 여러개, 해당되는 시리즈가 한개)
@JoinColumn(name = "series_id")
private SeriesEntity seriesEntity;
@Builder
public ArticleEntity(String title, String text, SeriesEntity seriesEntity) {
this.title = title;
this.text = text;
this.seriesEntity = seriesEntity;
}
// Setter를 사용하지 않기 위한 방안
public void editArticle(String title, String text, SeriesEntity seriesEntity) {
this.title = title;
this.text = text;
this.seriesEntity = seriesEntity;
}
}
// 시리즈 엔티티
//TODO: 얘도 빌더 수정해줘야지 뭐하니?
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity(name = "series")
public class SeriesEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long series_id;
@Column
private String series;
@Builder.Default
@OneToMany(mappedBy = "seriesEntity") // 한개가 다수로 매핑됨. (시리즈는 1개, 그에 해당하는 글이 여러개)
private List<ArticleEntity> articles = new ArrayList<>();
}
시리즈를 구현하고자 하면서 만나게 되었는데, 아무래도 Article 객체에는 시리즈를 String이 아닌 시리즈 엔티티로 가지고 있는게 문제인 듯 하다.
시리즈는 목록의 하나로써, 다대일 양방향 매핑으로 관리하고 있기 때문에, Article 객체에서는 엔티티로 관리하는게 필수적일 수 밖에 없다.
그렇다고 내가 add form에 시리즈 객체를 작성할 순 없으니, 방법을 찾아야 했다.
add form의 시리즈 항목 → 시리즈 엔티티로 넘김
→ 리포지토리에 있는 시리즈이면 그걸 그대로 사용해야 함.
→ 리포지토리에 없는 시리즈이면 시리즈 리포지토리에 추가해야함.
⇒ 그리고 최종적으로, 해당 시리즈 엔티티를 출간한 아티클 엔티티에 저장해줘야 하고,
아티클 엔티티를 시리즈 엔티티의 필드에 저장해줘야함.