Spring Hibernate MySql-无法添加外键约束
我有一个使用Mysql和Hibernate运行的Spring启动应用程序 在启动它时,我遇到了这个错误Spring Hibernate MySql-无法添加外键约束,mysql,spring,hibernate,Mysql,Spring,Hibernate,我有一个使用Mysql和Hibernate运行的Spring启动应用程序 在启动它时,我遇到了这个错误 Unsuccessful: alter table SMARTPARK.illuminazione add constraint FK_4kmtr3q9e2hnaoutsxgahhm63 foreign key (id_interruttore) references SMARTPARK.interruttori (id_interruttore) 2016-05-05 08:46:35 ER
Unsuccessful: alter table SMARTPARK.illuminazione add constraint FK_4kmtr3q9e2hnaoutsxgahhm63 foreign key (id_interruttore) references SMARTPARK.interruttori (id_interruttore)
2016-05-05 08:46:35 ERROR SchemaUpdate:262 - Cannot add foreign key constraint
我有两个表/实体
java(只是有趣的部分…)
在Interruttore.java中,我与Illuminazione有@OneToMany
关系
@Entity
@Table(name = "interruttori", catalog = "SMARTPARK", uniqueConstraints = @UniqueConstraint(columnNames = "id_interruttore"))
public class Interruttore implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int idInterruttore;
private int numeroInterruttore;
private String nomeInterruttore;
private String descrizione;
private List<Luce> luci;
private GpioController gpio;
private GpioPinDigitalOutput relePin;
private Pin pin;
private boolean remoto;
private boolean stato;
private Date dateTime;
private Set<Illuminazione> illuminazione;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "interruttore")
public Set<Illuminazione> getIlluminazione() {
return illuminazione;
}
public void setIlluminazione(Set<Illuminazione> illuminazione) {
this.illuminazione = illuminazione;
}
@实体
@表(name=“interruttori”,catalog=“SMARTPARK”,uniqueConstraints=@UniqueConstraint(columnNames=“id_interruttore”))
公共类Interruttore实现java.io.Serializable{
/**
*
*/
私有静态最终长serialVersionUID=1L;
特鲁托私人酒店;
私有整数;
私用字符串;
私有字符串描述;
私人名单;
专用gpio控制器gpio;
私人GPIOPIIndigitaloutput relePin;
私人密码;
私有布尔remoto;
私有布尔stato;
私人日期时间;
私人设置照明;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“interruttore”)
公共集getIlluminazione(){
返回照明;
}
公共空间设置照明(设置照明){
this.illuminazione=illuminazione;
}
每次启动应用程序时,在启动过程中,我都会收到此错误(即使应用程序似乎运行良好…我也会收到相同的错误消息,我发现这是由不正确的注释引起的。Hibernate正在尝试运行
alter table cidades
add constraint FKdt0b3ronwpi1upsrhaeq6r69n
foreign key (estado_id)
references estados (id)
当我查看我的Cidade.java
时,我发现了这个映射
@ManyToOne
@JoinColumn(name = "cidade_id")
private Estado estado;
错误出现在“cidade_id”
,它应该是“estado_id”
。如果@besmart能够提供数据库表信息,那就太好了,因为错误可能是由打字错误引起的(例如,id_interruttore
实际上可能是id_interruttori
)
我希望这对将来的人有所帮助。我遇到了类似的问题。
对我来说,显然hibernate/Spring没有使用mysql引擎-INNODB,您需要Engine INNODB for mysql来生成外键约束。
在application.properties中使用以下属性,使spring boot/hibernate使用mysql引擎INNODB
spring.jpa.hibernate.use-new-id-generator-mappings=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
iditerruttore
是主键吗?如果是,为什么使用uniqueConstraints=@UniqueConstraint(columnNames=“id_interruttore”)
?如何引导休眠(更新架构、创建、不执行任何操作)?我对hibernate不做任何操作,数据库已经存在,我只是连接到它。我使用SpringBoot默认进程连接看起来,hibernate无法添加FK_4kmtr3q9e2hnaoutsxgahhm63
,因为您的模式已经对其他名称有这样的约束。@besmart,您成功地让代码工作了吗?我面临同样的问题。有什么帮助吗非常感谢。请使用普通@Id注释进行检查
spring.jpa.hibernate.use-new-id-generator-mappings=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect