SpringBoot/PNUHack
ENUM클래스를 단일 객체가 아닌 리스트로 사용하기
브리오
2024. 8. 24. 15:53
@Entity
@Data
public class TourSpot {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String googleId;
private String name;
private String address;
private Double xCoordinate;
private Double yCoordinate;
@ElementCollection(targetClass = Theme.class)
@CollectionTable(name = "tourspot_themes", joinColumns = @JoinColumn(name = "tourspot_id"))
@Column(name = "theme")
@Enumerated(EnumType.STRING)
private Set<Theme> themes = new HashSet<>();
@ManyToOne
@JoinColumn(name = "area_id")
private Area area;
}
- @ElementCollection 사용: themes 필드는 @ElementCollection을 통해 기본 엔티티가 아닌 추가 컬렉션으로 관리됩니다. 이 부분은 기본 값들을 관리하는 방식으로, 데이터베이스에 tourspot_themes라는 별도의 테이블에 Theme 리스트를 관리합니다.
- Set<Theme>로 변경: 단일 항목이 아닌 여러 테마를 수용할 수 있도록 Set 사용을 통해 같은 테마가 중복으로 등록되지 않도록 합니다.
- 테마 처리 로직 확장: for (String themeName : themeArray) 구문을 사용하여 각 테마 문자열을 Enum으로 변환하고, 이를 TourSpot의 themes 필드에 추가하게끔 코드를 확장하였습니다.