【问题标题】:How to map one-to-many collection with join table using discriminator如何使用鉴别器将一对多集合与连接表映射
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 你就是男人!那成功了。感谢您的帮助!
    • 添加新条目时是否也可以在连接表中设置鉴别器?
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2014-07-22
    • 2013-05-20
    • 2019-01-22
    • 1970-01-01
    相关资源
    最近更新 更多