Ассоциация Hibernate ManyToMany на не уникальных полях

Вопрос:

Скажем, у меня есть классы сущностей Person and Book, имеющие дату имени поля (pe типа java.util.Date), которая представляет дату рождения Person и дату публикации для книг и, конечно же, не уникальны. Теперь в классе Entity Person я хочу иметь отношение (ManyToMany) к книгам, которое возвращает все книги, опубликованные в дату рождения человека. Возможно ли это, и если да, то как мне определить отношение ManyToMany (и JointTable)? Обратите внимание, что поле называется датой в обоих объектах и не является уникальным.

Я пытался

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "test",
joinColumns = @JoinColumn(name = "date", unique=false),
inverseJoinColumns = @JoinColumn(name = "date", unique=false)
)

но это приводит к исключению во время запуска (org.hibernate.MappingException: повторный столбец при сопоставлении для сбора)

и я попробовал

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "test",
joinColumns = @JoinColumn(name = "date_person", unique=false),
inverseJoinColumns = @JoinColumn(name = "date_book", unique=false)
)

но в результате создается пустая таблица. Я должен что-то упустить.

Лучший ответ:

Роль ассоциации заключается не в моделировании таких отношений. ManyToMany не работает с произвольными столбцами, имеющими одно и то же имя и значение. Он работает с таблицами соединений, содержащих внешний ключ для каждого из объединенных объектов.

Чтобы получить все книги, которые были опубликованы в тот же день, что и дата рождения человека, просто выполните запрос:

select b from Book b where b.date = :dateOfBithOfPerson

Оцените статью
TechArks.Ru
Добавить комментарий