首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate在Mysql中没有持久化外键

问Hibernate在Mysql中没有持久化外键
EN

Stack Overflow用户
提问于 2018-04-17 08:54:23
回答 3查看 438关注 0票数 1

我有一个实体Property,它有城市字段。就像这样:

代码语言:javascript
复制
@Entity
class Property {
    ...

    @ManyToOne(fetch = FetchType.LAZY)
    private City city;

    ...
}

因此,每一项财产(如房屋或公寓)只属于一个城市。

现在有一件事,如果我试图记录Hibernate生成的SQL,它将以正确的方式生成外键:

冬眠:

代码语言:javascript
复制
 alter table property 
    add constraint FKdn1hnohufcwdr4a401xabcjn 
    foreign key (city_id_city) 
    references city (id_city)

但是,如果我检查Mysql数据库,那里没有外键,只生成索引:

代码语言:javascript
复制
show create table property;

导致:

代码语言:javascript
复制
| 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定义呢?

EN

回答 3

Stack Overflow用户

发布于 2018-04-17 09:38:20

在我切换到InnoDB引擎开始工作后,问题最终变成了数据库引擎,因为MyISAM没有实现外键。

代码语言:javascript
复制
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
票数 2
EN

Stack Overflow用户

发布于 2018-04-17 09:15:28

注释@ManyToOne用于通过外键映射两个具有关系实例的表,它无法在数据库中自动创建外键

票数 0
EN

Stack Overflow用户

发布于 2018-04-17 09:23:28

您需要在City实体中定义list属性,并在其中添加关系

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49873763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档