Используя MySQL, почему Hibernate / JPA не создает для меня ограничения внешнего ключа? - PullRequest
8 голосов
/ 04 января 2012

Документируя это здесь, потому что я потратил час, пытаясь это выяснить.

У меня есть объект Foo с:

@ManyToOne(optional = false)
@JoinColumn(name = "barId")
private Bar bar;

Почему Hibernate не создает ограничение внешнего ключа дляfoo.bar -> bar.id?

Ответы [ 3 ]

14 голосов
/ 07 сентября 2012

Как предлагается здесь Hibernate: создание таблиц Mysql InnoDB вместо MyISAM вы также можете изменить Hibernate диалект для использования

org.hibernate.dialect.MySQL5InnoDBDialect

, который менее инвазивен.

Просто хотел добавить это как альтернативное решение.

9 голосов
/ 04 января 2012

Это потому, что MySQL не поддерживает ограничения внешнего ключа для таблиц, созданных с ENGINE = MyISAM. Вам нужно создать (обе!) Таблицы с ENGINE = InnoDB. Вы можете сделать это, настроив my.cnf и добавив значение по умолчанию, или используя специальную переменную в своем URL JDBC:

jdbc:mysql://localhost/dbname?characterEncoding=utf8&sessionVariables=storage_engine=InnoDB
7 голосов
/ 07 июня 2018

С SpringBoot вы можете установить application.properties на:

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect   

, и оно должно работать нормально.

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