Почему мы используем аннотацию @ForeignKey (name = "FK_COUNTRY")? - PullRequest
1 голос
/ 17 марта 2019

Я проходил через реляционные вещи в спящем режиме, где я получал это решение для связи между таблицами. Я попробовал это, оно работает нормально, но когда я удаляю @ ForeignKey (name = "FK_COUNTRY") тогда ничего не меняетсяПочему мы используем эту аннотацию, которая соответствует передовой практике?

@Entity
    @Table(name = "state")
    public class State {
        @Id
        @Column(name = "id")
        private int id;

        @Column(name = "name")
        private String name;

        @ManyToOne
        @ForeignKey(name="FK_COUNTRY")
        private Country country;
    }

Ответы [ 2 ]

2 голосов
/ 17 марта 2019

Hibernate должен отражать структуру БД, Вам следует прочитать о важности внешнего ключа

  1. Ссылочная целостность
  2. Легче детективная работа
  3. Лучшая производительность
1 голос
/ 17 марта 2019

Если вы прочитаете Javadoc @ForeignKey, вы найдете:

Используется для указания обработки ограничений внешнего ключа , когда генерируется схема . Если эта аннотация не указана, будет использоваться стратегия внешнего ключа поставщика сохраняемости по умолчанию.

Если вы не сгенерируете схему базы данных из определений классов (например, CREATE TABLE оператор SQL), аннотация не действует.

...