java - Hibernate 不创建外键约束

标签 java hibernate spring-data-jpa

这个问题似乎重复,但我还没有找到解决方案。

我正在使用 spring boot data 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;
}

还有

@Entity
@Getter
@Setter
@Table(name = "Answer")
public class Answer {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;

  @Column(length = 255)
  private String displayText;

  @OneToMany(mappedBy = "answer")
  private List<QuestionAnswerMapping> questionAnswerMapping;
}

还有

@Entity
@Table(name = "Question_Answer_Mapping")
public class QuestionAnswerMapping {

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

  @ManyToOne
  @JoinColumn(name="questionId", nullable = false /*, referencedColumnName="id" , foreignKey=@ForeignKey(name="FK_Question", value=ConstraintMode.CONSTRAINT)*/)
  /*    @JoinColumns(value = { @JoinColumn(name="questionId",referencedColumnName="id",foreignKey=@ForeignKey(value=ConstraintMode.CONSTRAINT)) }) */
  private Question question;

  @ManyToOne
  @JoinColumn(name="answerId", nullable = false /*, referencedColumnName="id", foreignKey=@ForeignKey(name="FK_Answer", value=ConstraintMode.CONSTRAINT)*/)
  /*    @JoinColumns(value = { @JoinColumn(name="answerId",referencedColumnName="id",foreignKey=@ForeignKey(value=ConstraintMode.CONSTRAINT)) }) */
  private Answer answer;

}

和application.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 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 key 的努力的组合,但失败了。

最佳答案

在application.properties中:

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect

关于java - Hibernate 不创建外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51618040/

相关文章:

java - 将文件的文本作为字符串返回?

java - 使用 Spring Kafka 处理死信主题的消息

hibernate - 使用 Hibernate + oracle 11g 获取 CLOB 数据时出现 java.sql.SQLRecoverableException

postgresql - Spring JPA Hibernate 在 postgres 中更新时间戳 wo 时区时出错

java - 匹配连续的单个字符作为整个单词

java - 如何在java3D中使用MouseListener和MouseMotionListener来旋转3D对象?

java - Hibernate 支持的可用于小型桌面应用程序的单文件数据库是什么?

hibernate - 在grails中将阿拉伯字符串插入数据库

java - Spring 数据 JPA。查找方式

Spring 标签 <form :option> not working with Spring Data DomainClassConverter?