【问题标题】:Rename a foreign key constraint in ManyToMany在 ManyToMany 中重命名外键约束
【发布时间】:2020-12-25 08:58:14
【问题描述】:

spring-boot-starter-parent 2.4.1

spring-boot-starter-data-jpa

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "clients__semantics_permissions",               
    joinColumns = {
       @JoinColumn(name = "client_id", foreignKey = @ForeignKey(name = "client_fk"))
    }
)
private Set<LevelTwoBase> semantics_level_two_base = new HashSet<LevelTwoBase>();

这会导致:

# \d clients__semantics_permissions
Table "public.clients__semantics_permissions"
               Column            |  Type   | Collation | Nullable | Default 
    -----------------------------+---------+-----------+----------+---------
     client_id                   | integer |           | not null | 
     semantics_level_two_base_id | integer |           | not null | 
Indexes:
   "clients__semantics_permissions_pkey" PRIMARY KEY,
   btree (client_id, semantics_level_two_base_id)
Foreign-key constraints:
   "fk5nepw5pnbbeewptg0a3tft563" FOREIGN KEY (semantics_level_two_base_id) REFERENCES semantics__level_two_base(id)
   "semantics_fk" FOREIGN KEY (client_id) REFERENCES clients__branch(id)

我不知道如何重命名semantics_level_two_base_id 的外键。换句话说,我就是不喜欢fk5nepw5pnbbeewptg0a3tft563

【问题讨论】:

    标签: hibernate spring-data-jpa


    【解决方案1】:

    指定inverseForeignKey

    @ManyToMany(fetch = FetchType.LAZY)                                                                         
    @JoinTable(name = "clients__semantics_permissions",                                                         
               joinColumns = { @JoinColumn(name = "client_id", foreignKey = @ForeignKey(name = "client_fk")) }, 
               inverseForeignKey = @ForeignKey(name = "<the name you like>"))                                    
    private Set<LevelTwoBase> semantics_level_two_base = new HashSet<LevelTwoBase>();                           
    

    Hibernate-Output 用于创建架构:(使用 level_two_base_fk 作为名称)

    Hibernate: create table clients__semantics_permissions (client_id int8 not null, semantics_level_two_base_id int8 not null, primary key (client_id, semantics_level_two_base_id))
    Hibernate: create table foo (id int8 not null, primary key (id))
    Hibernate: create table level_two_base (id int8 not null, primary key (id))
    Hibernate: alter table clients__semantics_permissions add constraint level_two_base_fk foreign key (semantics_level_two_base_id) references level_two_base
    Hibernate: alter table clients__semantics_permissions add constraint client_fk foreign key (client_id) references foo
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 2016-10-01
      • 2019-06-10
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      相关资源
      最近更新 更多