Я пытаюсь реализовать базовую систему тегов в спящем режиме. Проблема заключается в том, что все делали теги на подклассы, чтобы упростить отображение. Я хочу, чтобы мой объект Tag не зависел от того, как он используется. Это никогда не должно быть определенным для типа. Однако картирование оказалось очень сложным. Вот что я пытаюсь сделать.
Я начинаю с двух классов Tag и Prefix. Префикс будет содержать коллекцию тегов. У меня есть 3 таблицы. префикс, теги и tagged, где tagged - это таблица, объединяющая префикс и теги. Перечисление перечисляет другие объекты, которые я буду отмечать. Вот как я хочу поддерживать разные типы.
Это выглядит так:
CREATE TABLE tagged(
tag_id INT(11) NOT NULL,
object_id INT(11) NOT NULL,
discriminator ENUM('PREFIX', 'ROOT', 'SUFFIX')
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
В основе моего отображения лежит отображение один-ко-многим
@OneToMany
@JoinTable(name = "tagged", joinColumns = { @JoinColumn(name = "object_id") }, inverseJoinColumns = @JoinColumn(name = "id"))
public List<Tag> getTags() {
return tags;
}
Итак, вопрос в том, как мне присоединиться к таблице дискриминатора и установить для нее значение?
Я изначально пробовал:
@OneToMany
@JoinTable(name = "tagged", joinColumns = @JoinColumn(name = "object_id"), inverseJoinColumns = @JoinColumn(name = "id"))
@Where(clause = "discriminator='PREFIX'")
public List<Tag> getTags() {
return tags;
}
Это не сработало. Hibernate искал в таблице тегов дискриминатор. Есть идеи? Спасибо!