当前位置: 首页 > 面试题库 >

使用MySQL,为什么Hibernate / JPA不为我创建外键约束?

沈德寿
2023-03-14
问题内容

在这里记录此信息是因为我只花了一个小时试图解决这个问题。

我有一个实体Foo,拥有:

@ManyToOne(optional = false)
@JoinColumn(name = "barId")
private Bar bar;

Hibernate为什么不在foo.bar-> bar.id上创建外键约束?


问题答案:

这是因为MySQL在使用ENGINE = MyISAM创建的表上不支持外键约束。您需要使用ENGINE =
InnoDB创建(均为!)表。您可以通过调整my.cnf,添加默认值或在JDBC URL中使用特殊变量来执行此操作:

jdbc:mysql://localhost/dbname?characterEncoding=utf8&sessionVariables=storage_engine=InnoDB


 类似资料:
  • 问题内容: 我有一个实体: 和一个实体: Hibernate在foo.bar-> bar.id上创建外键约束,但未指定。为什么不?并且有什么方法可以实现? 或者,我可以在数据库中手动添加(并禁用DDL生成), 这是一个好习惯吗? 而且,我是否必须以某种方式修改代码以让Hibernate知道相关记录已被数据库自动删除? 谢谢。 更新 -这是我的JPA / Hibernate / PostgreSQL

  • 问题内容: 我在想, 我确定可以控制添加的类型,因此在MySQL中使用约束作为外键的动机是什么? 它会提高性能吗? 问题答案: 外键强制执行参照完整性。这些约束保证了表中具有引用表的字段的行将永远不会具有表中不存在的值。 外键不需要具有有效的关系数据库(实际上MySQL的默认存储引擎不支持FK),但是对于避免断开关系和孤立行(即参照完整性),它们绝对是必不可少的。是必需的在数据库级别实施参照完整性

  • 我有两张桌子: 基本上,我想通过id字段定义一个从到的外键,这两个表中的字段是相同的。问题是,当我在IntelliJ Idea中检查数据库时,我在Keys部分没有看到任何外键(检查了两个表),只有它们的PK。这段代码有问题吗?我已经按照另一个类似问题中的建议设置了属性:

  • 问题内容: 我有以下hibernate.cfg.xml: 我尝试了另一种方言(),但结果却很旧 pom.xml: 当调用以下代码行时: 我看到以下堆栈跟踪: 这个问题的原因是什么? 如何解决? 聚苯乙烯 数据库架构在MySql中不存在! 如果我明确添加数据库shema-一切正常。 从Java应用程序创建架构的方法在哪里? 问题答案: 我通常在使用Spring时使用属性文件自动创建数据库,以下是它的

  • 我现在对hibernate有一个很奇怪的问题。在一个表上,它创建了一个引用它自己的外键。该列也是主键。这基本上阻止了我从表中删除任何行。 在日志中我可以看到一行字:

  • 我有以下问题,我有一个已经存在的表,有三个字段field1,field2,field3。Field1实际上是另一个表的外键(@OneToOne)。所有字段2和字段3都可以为空,所以我不能为所有三个字段设置主键。在数据库中,field1 field2 field3有一个唯一约束。 我用JPA/Hibernate尝试了几种解决方案,但没有找到一个好的。如果不定义@Id,JPA当然无法工作。在@Embe