Spring Hibernate MySql-无法添加外键约束

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

我有一个使用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 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