簡體   English   中英

Hibernate不會在MySQL中保留外鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM