【问题标题】:Spring Data JPA @JoinColumn without foreign keySpring Data JPA @JoinColumn 没有外键
【发布时间】:2020-07-28 23:18:22
【问题描述】:

我看过一些关于它的帖子,但没有一个对我有帮助。

为什么@JoinColumn(foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT)) 不起作用?

public class ClassA {

    @Id
    private String id;
    
    @NotNull
    private String someProperty;
    
    @OneToMany(mappedBy = "classA")
    private Set<ClassB> bs;
}


public class ClassB {
    
    @Id
    private String id;
    
    @NotNull
    private String someProperty;
    
    @ManyToOne
    @JoinColumn(foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
    private ClassA classA;
}

当应用程序启动时,它仍然会创建 fks,尽管我有明确的配置。

create table class_a (id varchar(255) not null, some_property varchar(255), primary key (id));
   
create table class_b (id varchar(255) not null, some_property varchar(255), class_a_id varchar(255), primary key (id));

alter table if exists class_b add constraint FKjpk05raxduof60eee8p6khbch foreign key (class_a_id) references class_a

application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/my-spring-data-sample
spring.datasource.username=postgres
spring.datasource.password=***

spring.jpa.hibernate.ddl-auto=create 
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL95Dialect

谢谢!

【问题讨论】:

  • 显示你得到的错误。
  • 没有错误。问题是,当应用程序启动时,它仍然会创建 fks,尽管我有明确的配置。

标签: hibernate jpa spring-data-jpa


【解决方案1】:
    @org.hibernate.annotations.ForeignKey(name = "none")
    @ManyToOne
    private ClassA classA;

    
    @OneToMany(mappedBy = "classA")
    @org.hibernate.annotations.ForeignKey(name = "none")
    private Set<ClassB> bs;

【讨论】:

  • 关于旧版本:我已经阅读了这个选项,但我还没有尝试过双方的关系!现在它起作用了!谢谢!我正在使用休眠版本 5.4.18.Final。不应该按照我在问题中提到的方式工作吗?再次感谢!
  • 我已经打开了一个问题hibernate.atlassian.net/browse/HHH-14123
猜你喜欢
  • 2017-05-29
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 2014-05-22
相关资源
最近更新 更多