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 필드에 추가하게끔 코드를 확장하였습니다.