свойство spring.jpa.hibernate.ddl-auto = update изменяет внешний ключ каждый раз - PullRequest
0 голосов
/ 30 ноября 2018

Я использую свойство spring.jpa.hibernate.ddl-auto = update для обновления схемы.

Насколько я понимаю, если мы внесем изменения в сущность, тогда схема таблицы будет обновлена.

Но при весенней загрузке приложения каждый раз при выполнении команды 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;

}

В сущности, как вы можете видеть, у меня есть два следующих свойства для того внешнего ключа, который создается при запуске приложения весенней загрузки:

@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 для внешнего ключа, если я не изменяю свойство объекта внешнего ключа?

1 Ответ

0 голосов
/ 05 декабря 2018

Ограничения являются частью определения схемы базы данных.Ограничения - это правила, применяемые к столбцам данных таблицы.Они используются для ограничения типа данных, которые могут попадать в таблицу.Это обеспечивает точность и достоверность данных в базе данных.Ограничения могут быть либо на уровне столбца, либо на уровне таблицы.Ограничения уровня столбца применяются только к одному столбцу, тогда как ограничения уровня таблицы применяются ко всей таблице.

виды ограничений:

  • NOT NULL - Гарантирует, что столбец не может иметь значение NULL.
  • ПО УМОЛЧАНИЮ - Предоставляет значение по умолчанию для столбца, если ни один не указан.
  • UNIQUE - Гарантирует, что все значения в столбце различны.
  • PRIMARY KEY - Уникально идентифицирует каждую строку / запись в таблице базы данных.
  • FOREIGN KEY - Уникально идентифицирует строку / запись в любой из данных таблиц базы данных.
  • CHECK CONSTRAINT - Ограничение CHECK гарантирует, что все значения в столбце удовлетворяют определенным условиям.
  • INDEX - Используется для очень быстрого создания и извлечения данных из базы данных.

Q: Является ли это ограничение в hibernate необязательным или отменено для обновления?

A: Нет. Это не является обязательным, это необходимо для реляционной сущности.

Вы также можете определить это ограничение в вашей БД для изменения во время выполнения при необходимостино будьте осторожны, не рекомендуется.

Я думаю, что это ошибка в спящем режиме, чтобы каждый раз изменять базу по этой ссылке ниже (та же проблема):

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...