gpt4 book ai didi

java - 为什么 @JoinTable 上的 JPA (Hibernate) 外键定义不起作用?

转载 作者:行者123 更新时间:2023-11-30 07:43:02 29 4
gpt4 key购买 nike

我正在使用 JPA 2.1 和 Hibernate 4.3 作为持久性提供程序来开发一个应用程序。

为了提高可读性和更好的维护性,我想明确命名每一个可能的想法,而不是依赖 hibernate 命名策略。

我正在使用新推出的@ForignKey注解来自定义外键约束名称,它适用于 @JoinColumn@ManyToOne 相关关系。

当尝试自定义为@ManyToMany生成的外键约束时,问题就出现了。使用 @JoinTable 的关系,提供商不使用我提供的名称,并恢复为其随机生成的名称。

例如:

@ManyToOne
@JoinColumn(name = "store_id", referencedColumnName = "id",
foreignKey = @ForeignKey(name = "fk_collection_store_id"))
Store store;

正确生成以下ddl

alter table collection add constraint fk_collection_store_id foreign key (store_id) references store

但是当我尝试将它与 @ManyToMany 一起使用时关联,它没有按预期工作:

@ManyToMany
@JoinTable(name="collection_product",
joinColumns = {@JoinColumn(name="collection_id", referencedColumnName = "id")},
foreignKey = @ForeignKey(name = "fk_collection_product__collection_id"),
inverseJoinColumns = {@JoinColumn(name="product_id", referencedColumnName = "id")},
inverseForeignKey = @ForeignKey(name = "fk_collection_product__product_id"))
List<Product> products = new ArrayList<>();

生成的 ddl 不尊重我提供的名称,并恢复为自动生成的随机名称:

alter table collection_product add constraint FK_skd8u4feadi59mpp8os1q1ar3 foreign key (product_id) references product

alter table collection_product add constraint FK_lbkv2n46sv06t6qfwabbk0wgw foreign key (collection_id) references collection

那么,这里出了什么问题?

顺便说一句,我尝试在@JoinColumn上使用foreignKey属性本身(似乎是错误的,但我还是尝试了)并且它也没有帮助:

@ManyToMany
@JoinTable(name="collection_product",
joinColumns={@JoinColumn(name="collection_id", referencedColumnName = "id",
foreignKey = @ForeignKey(name = "fk_collection_product__collection_id"))},
inverseJoinColumns={@JoinColumn(name="product_id", referencedColumnName = "id",
foreignKey = @ForeignKey(name = "fk_collection_product__product_id"))})
List<Product> products = new ArrayList<>();

它也不起作用:

alter table collection_product add constraint FK_skd8u4feadi59mpp8os1q1ar3 foreign key (product_id) references product

alter table collection_product add constraint FK_lbkv2n46sv06t6qfwabbk0wgw foreign key (collection_id) references collection

完成这项工作的正确方法是什么?

谢谢

最佳答案

搜索 Hibernate 问题跟踪器,我发现了几个与此问题相关的错误报告。

它在 5.x 版本中已部分修复。新系统仍然没有选择某些情况,例如嵌入式持久类中的关系。我打算很快为此提交一个错误

同时您可以升级到 5.x 版本,我使用 5.1 并且工作正常,并且几乎没有移植问题。

关于java - 为什么 @JoinTable 上的 JPA (Hibernate) 外键定义不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34390280/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com