我正在尝试用hibernate实现一个基本的标记系统。问题是每个人都在继承Tag以使映射更容易。我想让我的Tag对象不知道如何使用它。它永远不应该特定于某种类型。但是,映射已证明非常困难。这是我想要实现的目标。
我开始使用Tag和Prefix这两个类。前缀将包含一组标签。我有3张桌子。前缀,标签和标记标记的是加入前缀和标记的表。枚举列出了我要标记的其他对象。这就是我想要支持不同类型的方式。
看起来像这样:
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在标签表中寻找鉴别器。有任何想法吗?谢谢!