【问题标题】:is mappedBy in hibernate defined as per schema definition or is it defined logically?休眠中的 mappedBy 是根据模式定义定义的还是在逻辑上定义的?
【发布时间】:2012-02-22 12:10:21
【问题描述】:

我有以下情况:

一个目的地可以有多个别名

逻辑上:我希望 Destination 成为这种关系的所有者,因为如果没有目的地,别名就没有任何意义。

但是,数据库架构是这样的:

DestinationAlias 将 idDestination 作为外键,因此休眠注释中的 @JoinColumn 将位于 DestinationAlias 上:

目的地:

@OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.ALL}, mappedBy = "mainCity")
    public Set<DestinationAlias> getAliases() {
        return aliases;
    }

目的地别名:

@ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.ALL})
    @JoinColumn(name="IDDESTINATION", nullable=false)
    public Destination getMainCity() {
        return mainCity;
    }

根据这个定义,DestinationAlias 是这个关系的所有者,因为mappedBy 是 Destination 类的一个属性。

hibernate 是否需要我遵循database schema 并将实体标记为关系的所有者,还是可以根据Logical 的原因来完成?

【问题讨论】:

    标签: java hibernate jakarta-ee hibernate-mapping


    【解决方案1】:

    所有权会影响 hibernate 对底层数据库表的建模方式。如果省略 mappedBy 属性,hibernate 将在 Destination 和 DestinationAlias 之间生成一个连接表(如 M-M 关系),而不是简单的连接列。除此之外,我很好奇您的实际问题是什么。这纯粹是装饰性的,还是对您而言存在功能问题?

    编辑:由于这似乎是一个纯粹的表面问题,我的建议是接受 Hibernate 语义。虽然我同意 Hibernate 将 DestinationAlias 称为“所有者”可能看起来违反直觉,但这只是 Hibernate 决定的命名法。它也不是唯一的,它来自“所有者”是连接列所在的概念。

    不要浪费时间试图强制休眠以符合您的定义。

    【讨论】:

    • 我当前的问题是,DestinationAlias 是这种关系的所有者,从语义上讲,我希望 Destination 成为所有者。否则代码可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2020-05-28
    • 1970-01-01
    相关资源
    最近更新 更多