【问题标题】:Override joined-inheritance foreign key name with JPA/Hibernate使用 JPA/Hibernate 覆盖连接继承外键名称
【发布时间】:2015-12-31 17:10:42
【问题描述】:

我有一个继承自 Media 类的 CD 类:

光盘:

@Entity
public class CD extends Media {
   ...
}

媒体:

@Entity(name = "media")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Media extends PersistenceId<Long> {
   ...
}

JPA 自动生成一个外键名称,我想用我想要的名称覆盖它:

03-10 18:16:58.174 [main] 调试 org.hibernate.SQL - 更改表 cd 添加 约束 FK_ehd468g2cptgh6bq6sxe75xlf 外键 (id) 引用 媒体(id)

如何做到这一点?我试过了:

@Entity
@AssociationOverride(
   name = "id",
   foreignKey = @ForeignKey(name = "fk_cd_media")
)
public class CD extends Media {
   ...
}

@Entity
@PrimaryKeyJoinColumn(foreignKey=@ForeignKey(name = "fk_cd_media"))
public class CD extends Media {
   ...
}

但它不起作用。

这里是生成的创建表sql:

CREATE TABLE `cd` (
  `artist` varchar(255) DEFAULT NULL,
  `year` int(11) NOT NULL,
  `id` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `FK_ehd468g2cptgh6bq6sxe75xlf` FOREIGN KEY (`id`) REFERENCES `media` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

我想要:

CONSTRAINT `fk_cd_media` FOREIGN KEY (`id`) REFERENCES `media` (`id`)

【问题讨论】:

    标签: mysql hibernate jpa foreign-keys


    【解决方案1】:

    你的第二次尝试是要走的路:

    @Entity
    @PrimaryKeyJoinColumn(foreignKey=@ForeignKey(name = "fk_cd_media"))
    public class CD extends Media {
       ...
    }
    

    问题是您遇到了 Hibernate 错误:https://hibernate.atlassian.net/browse/HHH-10352

    编辑:问题解决了:

    修复版本/秒:5.0.10、5.2.1、5.1.1

    【讨论】:

    • 对我有用的是@PrimaryKeyJoinColumn(name="fk_cd_media")
    • @ntholi,那个别扭,按照documentation的说法,“name”字段应该不是设置外键名,而是主键列的名称,不一样事情。
    猜你喜欢
    • 2017-12-19
    • 2013-12-10
    • 2011-07-21
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2019-06-29
    相关资源
    最近更新 更多