带有没有外键的数据库的 Spring JPA

Posted

技术标签:

【中文标题】带有没有外键的数据库的 Spring JPA【英文标题】:Spring JPA with a database that doesn't have Foreign Keys 【发布时间】:2021-09-06 23:27:18 【问题描述】:

我必须在 Spring Boot 中重写一个旧软件。该软件有一个没有任何 FK 的数据库。我的问题是,如果某个类具有来自与 FK 的 JPA 注释之一无关的其他类的对象,我无法将它映射到 JPA。

您知道是否可以让 JPA 忽略或禁用 FK 约束?

【问题讨论】:

【参考方案1】:

无论您的数据库是否有外键,对 Hibernate 来说都无关紧要。 Hibernate 不会检查您的数据库中的外键。当然你可能会在数据库方面遇到一些问题,但是 Hibernate 只会根据你的实体类映射查询,而不是数据库中的外键。

如果您希望 Hibernate 在应用程序启动时创建您的数据库架构,并且您希望它尽可能接近真实的架构(例如用于测试),您可以使用此注释告诉 Hibernate 不要创建外键:

@JoinColumn(name = "SOME_ID", nullable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))

【讨论】:

我还需要使用例如@OneToMany 表示法吗? 如果你想要代码级别的关系,那么是的,Hibernate 怎么知道映射关系?

以上是关于带有没有外键的数据库的 Spring JPA的主要内容,如果未能解决你的问题,请参考以下文章

JPA eclipselink坚持没有主键但有两个外键的实体

Spring Data JPA 多个实体类表联合视图查询

在数据库上插入实体+外键的正确方法(使用:Mysql,JPA)

如何让jpa休眠创建具有多对一但没有外键的实体

如何在不同的数据库中使用带有外键的 django 模型?

基于外键的增量字段(JPA、Hibernate、Oracle DB)