Java Hibernate不创建外键约束
这个问题似乎重复,但我还没有找到解决办法 我使用的是spring boot数据jpa+mysql,下面是我的类: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
@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>