Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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不创建外键约束_Java_Hibernate_Spring Data Jpa - Fatal编程技术网

Java Hibernate不创建外键约束

Java Hibernate不创建外键约束,java,hibernate,spring-data-jpa,Java,Hibernate,Spring Data Jpa,这个问题似乎重复,但我还没有找到解决办法 我使用的是spring boot数据jpa+mysql,下面是我的类: @Entity @Getter @Setter @Table(name = "Question") public class Question { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(length = 128) private Strin

这个问题似乎重复,但我还没有找到解决办法

我使用的是spring boot数据jpa+mysql,下面是我的类:

@Entity
@Getter
@Setter
@Table(name = "Question")
public class Question {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;

  @Column(length = 128)
  private String name;

  @OneToMany(mappedBy = "question", cascade = CascadeType.ALL, orphanRemoval = true)
  private List<QuestionAnswerMapping> questionAnswerMapping;
}
和应用程序.yml

--- 
spring:
  profiles: local

  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false
    username: root

  jpa:
    generate-ddl: true
    show-sql: true
    hibernate:
      naming:
        physical-strategy:     org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL5Dialect
        ddl-auto: create-drop
这些是我用ORM创建表后复制的create语句

CREATE TABLE `question` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


CREATE TABLE `answer` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `displayText` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


CREATE TABLE `question_answer_mapping` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `answerId` int(11) NOT NULL,
  `questionId` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `FKpjg76y4ofqmvfmbujphnqyq1y` (`answerId`),
  KEY `FK2mbyguxt74rwhv1n1t11wi3fl` (`questionId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

所有被注释掉的部分都是我在数据库模式上创建FK键的努力的组合,失败了。

根据@JBNizet注释,我使用了错误的方言:)


在application.properties中:

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
确保:

<property name="dialect">org.hibernate.dialect.MySQL55Dialect</property>
org.hibernate.dialogue.mysql55dialogue

在您的hibernate.cfg.xml中:表中对外键支持有何说明?@JBNizet谢谢,我没有注意引擎:)@JBNizet如果我将方言更改为mysqlinnodbdialent,它会抱怨创建外键,并说映射表不存在。如果您对错误有疑问,请编辑您的问题,并发布完整、准确的错误消息。请注意,在最新的Hibernate版本中,不推荐使用MySQLINNODBALECTION。阅读javadoc并使用适当的方言和适当的选项。
org.hibernate.dialect.MySQL55Dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
<property name="dialect">org.hibernate.dialect.MySQL55Dialect</property>