gpt4 book ai didi

spring.jpa.hibernate.ddl-auto = update属性每次都会更改外键

转载 作者:行者123 更新时间:2023-12-04 21:30:33 45 4
gpt4 key购买 nike

我正在使用spring.jpa.hibernate.ddl-auto = update属性更新架构。

根据我的理解,如果我们在实体中进行更改,那么表架构将得到更新。

但是在spring boot app启动时,每次对外键执行alter命令时。

以下是实体。

@Entity
@Table(name = "feedback")
@Data
public class Feedback implements Serializable {

private static final long serialVersionUID = -6420805626682233375L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "study_id")
@JsonIgnore
private Study study;

@ManyToOne(fetch= FetchType.EAGER)
@JoinColumn(name="user_id", nullable = false)
private User user;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "feedback_date", nullable = false)
private Date feedbackDate;

@Size(max = 1000)
@Column(name = "feedback", length = 1000)
private String feedback;

}

在实体中,您可以看到我具有以下两个属性,该属性是在首次启动Spring Boot应用程序时创建的外键:
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "study_id")
@JsonIgnore
private Study study;

@ManyToOne(fetch= FetchType.EAGER)
@JoinColumn(name="user_id", nullable = false)
private User user;

因此,当我每次重新启动应用程序或保存代码时,即使我不更改该关系(属性),外键约束也会改变。
2018-12-05 18:44:12.027  INFO 22736 --- [  restartedMain] c.d.smartviewer.SmartViewerApplication   : Starting SmartViewerApplication on LAPTOP-F95LLCU3 with PID 22736 (D:\Sagar_\SVN\SmartViewer\target\classes started by ASUS in D:\Sagar_\SVN\SmartViewer)
2018-12-05 18:44:12.027 DEBUG 22736 --- [ restartedMain] c.d.smartviewer.SmartViewerApplication : Running with Spring Boot v2.0.6.RELEASE, Spring v5.0.10.RELEASE
2018-12-05 18:44:12.027 INFO 22736 --- [ restartedMain] c.d.smartviewer.SmartViewerApplication : No active profile set, falling back to default profiles: default
2018-12-05 18:44:13.356 INFO 22736 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1329 ms
Hibernate: alter table annotation add constraint FK7hwy1g5myfk7grmm2j7faqggd foreign key (parent_id) references annotation (id)
Hibernate: alter table feedback add constraint FKfxt8nk3jikofi3x40bsjd00vt foreign key (study_id) references study (id)
Hibernate: alter table feedback add constraint FK7k33yw505d347mw3avr93akao foreign key (user_id) references user (id)
Hibernate: alter table hospital add constraint FK3922fhj7qnyc3bw5x8xl6m6xc foreign key (contact_1) references contact (id)

因此,如果不更改外键实体属性,我应该更改为不对外键执行alter命令吗?

最佳答案

约束是数据库架构定义的一部分。
约束是对表的数据列强制执行的规则。这些用于限制可以进入表的数据类型。这样可以确保数据库中数据的准确性和可靠性。约束可以在列级别或表级别。列级约束仅应用于一列,而表级约束则应用于整个表。

各种约束是:

  • NOT NULL -确保列不能具有NULL值。
  • 默认值-如果未指定任何列,则为该列提供默认值。
  • UNIQUE -确保列中的所有值都不同。
  • 主键-唯一标识数据库表中的每一行/记录。
  • FOREIGN KEY -唯一标识任何给定数据库表中的行/记录。
  • CHECK CONSTRAINT -CHECK约束可确保列中的所有值都满足某些条件。
  • 索引-用于非常快速地从数据库创建和检索数据。

  • 问: hibernate 中的此约束是可选的还是取消以更新?

    A:否。它不是可选的,对于关系实体是必需的。

    您也可以在数据库中将此约束定义为在运行时进行更改(如有必要),但建议不要小心。

    我认为这是 hibernate 的错误,每次更改都基于以下链接(相同的问题):

    https://discourse.hibernate.org/t/manytoone-alter-table-query-is-generating-every-time-when-inserting-a-value/1162/6

    关于spring.jpa.hibernate.ddl-auto = update属性每次都会更改外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53551959/

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