我有一个运行Spring Boot应用程序和Mysql和Hibernate。
启动时,我收到此错误
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
我有两个表/实体
Illuminazione.java(只是有趣的部分......)
@Entity
@Table(name = "illuminazione", catalog = "SMARTPARK")
public class Illuminazione {
private int idilluminazione;
private Interruttore interruttore;
private Date dateTime;
private Date lastDateTime;
private boolean isLit;
@ManyToOne
@JoinColumn(name = "id_interruttore")
public Interruttore getInterruttore() {
return this.interruttore;
}
public void setInterruttore(Interruttore interruttore) {
this.interruttore = interruttore;
}
在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;
}
每次启动应用程序时,在启动过程中我都会收到此错误(即使应用程序似乎运行良好......)
答案 0 :(得分:5)
我有相同的错误消息,我发现这是由错误的注释引起的。 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
)。
我希望这有助于将来的某些人。
答案 1 :(得分:1)
我遇到了类似的问题。 对我来说,显然hibernate / Spring没有使用mysql Engine -INNODB,您需要mysql的引擎INNODB来生成外键约束。 在application.properties中使用以下属性,可使spring boot / hibernate使用mysql引擎INNODB。因此,外键约束有效,因此也删除了层叠
spring.jpa.hibernate.use-new-id-generator-mappings=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect