【发布时间】:2011-06-22 16:24:14
【问题描述】:
我正在尝试使用 hibernate 实现一个基本的标记系统。问题是每个人都在继承 Tag 以使映射更容易。我想让我的 Tag 对象不知道它的使用方式。它永远不应该特定于一种类型。然而,映射已被证明是非常困难的。这是我想要完成的。
我从两个类 Tag 和 Prefix 开始。前缀将包含一组标签。我有 3 张桌子。 prefix、tags 和 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 在标签表中寻找鉴别器。有任何想法吗?谢谢!
【问题讨论】:
标签: java hibernate annotations one-to-many