如何使用鉴别器使用连接表映射一对多集合

时间:2011-06-22 16:24:15

标签: java hibernate annotations one-to-many

我正在尝试用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在标签表中寻找鉴别器。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用WhereJoinTable annotation?鉴于其文档,它应该做你想要的。