代码之家  ›  专栏  ›  技术社区  ›  jsight TaherT

@OneTomany没有反向关系,也没有联接表?

  •  33
  • jsight TaherT  · 技术社区  · 15 年前

    这是一个类似于 "Hibernate @OneToMany without a separate join table" ,因为我需要一个没有联接表的@OneTomany关系。但是,我也不想定义反向关系。删除反转似乎会导致自动生成联接表…有解决办法吗?

    3 回复  |  直到 15 年前
        1
  •  50
  •   Scheintod    11 年前

    在JPA2.0+中,可以使用@joincolumn作为避免生成联接表的方法。

    试试看。

    @OneToMany
    @JoinColumn(name="COLUMN_NAME")
    

    更新

    上面提供的信息是从EJB3.0 O'Reilly手册中提取的(请查看电话表中的@joincolumn注释引用了customer_id列)。但是,纯JPA1.0规范不支持此功能。它所说的是

    单向的一对多关系可以使用一对多的外键映射来实现,但是,在这个版本中不需要这样的支持。希望对一对多关系使用外键映射策略的应用程序 应该使这些关系双向,以确保可移植性

    所以 在1.0中,它是特定于供应商的实现 (这是有道理的,作者在JBoss工作——冬眠后的红帽分区)

    但是 JPA2.0实现支持

    如果连接用于使用外键映射策略的单向单目标映射, 外键在目标实体的表中 .

        2
  •  15
  •   Pascal Thivent    14 年前

    JPA1.0规范有 不是 支持单向单目标映射 没有联接表 .

    并使用 JoinColumn 在一 OneToMany 不允许进入 标准 JPA 1.0(仅适用于 OneToOne , ManyToOne ManyToMany )。不过是JPA2.0版本。

    根据JPA 1.0规范:

    2.1.8.5.1单向一对多关系

    应用以下映射默认值:

    实体A映射到名为 A . 实体B映射到表 命名 B . 有一个连接表 这个名字 A_B (业主姓名) 首先)。这个连接表有两个 外键列。一个外键 列引用表 并且有 与表的主键类型相同 A . 此外键的名称 列的格式为串联 其中:实体名称 a;“主关键字”的名称 表列 . 另一个外国人 键列引用表B并具有 与的主键类型相同 桌子 还有一把独特的钥匙 对它的约束。这个名字 外键列的格式为 以下各项的串联: 关系属性的名称或 实体A的字段;“_u”的名称 表中的主键列 B .

    综上所述,如果您不想要一个联接表(以及完整的读/写支持),并且仍然想要符合JPA,那么可以使关联双向(使用 inverse 一边)。

    下面的wiki图书链接讨论了一个技巧(将目标表映射为联接表)来“解决”问题,但这只适用于读、写操作。

    工具书类

        3
  •  0
  •   dinesh ranawat    8 年前

    如果数据库中没有联接表,那么通过外键引用主键来实现数据库中两个表之间的关系。 如果关系是通过pk/fk的,则目标类中必须有一个引用回源的属性,以便用值填充fk列。目标类中的此属性可以是ID或源对象。 如果它是源对象,那么您需要在目标类中有一个反向的@manytoone。