[英]Hibernate not persisting foreign keys in Mysql
我有一個具有城市領域的實體Property
。 像這樣:
@Entity
class Property {
...
@ManyToOne(fetch = FetchType.LAZY)
private City city;
...
}
因此,每個財產(例如房屋或公寓)僅屬於一個城市。
現在這是一件事情,如果我嘗試通過Hibernate記錄生成的SQL,它將以正確的方式生成外鍵:
休眠:
alter table property
add constraint FKdn1hnohufcwdr4a401xabcjn
foreign key (city_id_city)
references city (id_city)
但是,如果我檢查Mysql數據庫,則那里沒有外鍵,只會生成索引:
show create table property;
導致:
| property | CREATE TABLE `property` (
`id_property` int(11) NOT NULL AUTO_INCREMENT,
`created_at` datetime NOT NULL,
`deal_type` varchar(15) NOT NULL,
`publisher_type` varchar(15) NOT NULL,
`type` varchar(15) NOT NULL,
`updated_at` datetime NOT NULL,
`city_id_city` int(11) DEFAULT NULL,
PRIMARY KEY (`id_property`),
KEY `FKdn1hnohufcwdr4a401xabcjn` (`city_id_city`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
所以問題是為什么我的數據庫中沒有CONSTRAINT FOREIGN KEY () REFERENCES
定義?
批注@ManyToOne用於通過外鍵映射具有關系實例的兩個表,它無法在數據庫中自動創建外鍵
您需要在城市實體中定義列表屬性,並在其中添加關系
在我切換到InnoDB
引擎后,問題最終歸結為數據庫引擎,因為MyISAM
沒有實現外鍵,所以它開始起作用。
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.