Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate不在Mysql中持久化外键_Java_Mysql_Hibernate_Jpa - Fatal编程技术网

Java Hibernate不在Mysql中持久化外键

Java Hibernate不在Mysql中持久化外键,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,我有一个实体属性,其中包含城市字段。大概是这样的: @Entity class Property { ... @ManyToOne(fetch = FetchType.LAZY) private City city; ... } 因此,每个财产(如房屋或公寓)只属于一个城市 现在有一件事,如果我尝试记录Hibernate生成的SQL,它会以正确的方式生成外键: 休眠: 但是,如果我检查我的Mysql数据库,那里没有外键,只生成索引: show create

我有一个实体
属性
,其中包含城市字段。大概是这样的:

@Entity
class Property {
    ...

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

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

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

休眠:

但是,如果我检查我的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 |

所以问题是为什么在我的数据库中没有约束外键()引用定义?

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

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

在我切换到
InnoDB
引擎后,问题最终成为数据库引擎,因为
MyISAM
没有实现外键

spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

那么为什么它会记录它正在创建外键?我不知道你怎么能看到这个日志。它是什么时候记录的,还是您第一次启动应用程序时记录的?
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect