Скажем, у меня есть классы сущностей 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