我有一个实体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定义呢?
发布于 2018-04-17 09:38:20
在我切换到InnoDB引擎开始工作后,问题最终变成了数据库引擎,因为MyISAM没有实现外键。
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect发布于 2018-04-17 09:15:28
注释@ManyToOne用于通过外键映射两个具有关系实例的表,它无法在数据库中自动创建外键
发布于 2018-04-17 09:23:28
您需要在City实体中定义list属性,并在其中添加关系
https://stackoverflow.com/questions/49873763
复制相似问题