나는 영화관 지주를 시뮬레이트하는 Java 응용 프로그램을 구현 중입니다. 엔티티 중 하나는 Film
이며,이 엔티티는 많은 수의 Genres
을 가질 수 있지만, 분명히 제한된 수의 수는 Genres
입니다. 나는 이것을 Hibernate에서 어떻게 구현해야하는지 확신하지 못한다.한쪽에 제한된 옵션으로 다 대다 매핑
먼저 enum 클래스 Genre
을 만들고 Film
엔티티에 Set<Genre> genres = new HashSet<>();
특성을 부여했습니다.
이 문제는 Hibernate에 의해 생성 된 테이블 film_genres
전화에 Genre
가 데이터베이스에서 BLOB
로 저장됩니다 나는 특정 Genre
의 모든 영화를 요청 할 수 없을 것입니다. (최소한 내 제한된 Hibernate 경험에서).
Genre
클래스는 다음과 같습니다 어디 가능한 모든
Genres
로 시작시 데이터베이스를 채울 수 있다고 생각 :
public class Genre {
private Integer id;
private String name;
private Genre() {}
public Genre(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
private void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
private void setName(String name) {
this.name= name;
}
}
아주 기본 클래스입니다. 하지만 지금은 할 수 없어, 나는 Film
에 Genre
를 추가 할 말 :이 장르 드라마의 각 영화에 대한 새로운 Genre
객체를 생성하는 것처럼
Film film = new Film("The Terminal");
film.addGenre(new Genre("Drama"));
가보고. "Drama"값을 갖는 Genre
개체를 가져 와서 해당 개체를 추가하려면 먼저 데이터베이스로 이동해야합니까?
그 수행해야 무슨 경우에, 난 여전히 같은 열거를 사용하고 싶습니다 :
public enum GenreEnum {
DRAMA("Drama"),
ADVENTURE("Adventure"),
ACTION("Action"),
...
private String value;
GenreEnum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
그 이유는 내가 들어가는 초기 값의 맞춤법을 완벽하게 제어 할 수 있다는 것입니다
데이터베이스합니다 (미리 채우기) 및 열거 형의 값, 그래서 나는 지금이 작업을 수행 할 수 있습니다 :
Film film = new Film("The Terminal");
film.addGenre(GenreEnum.DRAMA);
그리고 다음 addGenre
방법에 내가 할 수있는을 :
public void addGenre(GenreEnum ge) {
Query query = session.createQuery("from Genre g where g.name = " + ge.getValue());
Genre genre = (Genre)query.list().get(0);
this.genres.add(genre);
}
트랜잭션 코드를 모델에 넣지는 않겠지 만 단순화를 위해 거기에 넣었습니다. 나는 또한 연결의 사용이 안전하지 않다는 것을 알고 있습니다.
괜찮은 해결책인가요? 아니면 이것을 달성하기 위해 더 간단한 것을 놓치고 있습니까?