【发布时间】:2019-05-22 06:42:29
【问题描述】:
我无法在我的“宠物”实体中生成外键。使用“spring.jpa.hibernate.ddl-auto=create”成功生成了模式,但由于缺少外键,我的表没有链接。
我将“hibernate.dialect.storage_engine=innodb”添加到“appliction.properties”中,但没有产生任何结果,我认为 InnoDB 现在是默认引擎。
宠物.java
@Entity
@Table(name="pet")
public class Pet {
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Id
private int id;
@Column(name="name")
private String name;
@Column(name="type_of_pet")
private String typeOfPet;
@ManyToOne(cascade={CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinColumn(name="owner_id")
private Owner owner;
public Pet(String name, String typeOfPet) {
this.name = name;
this.typeOfPet = typeOfPet;
}
public Pet() {
}
Owner.java
@Entity
@Table(name="owner")
public class Owner {
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Id
private int id;
@Column(name="name")
private String name;
@OneToMany(mappedBy="owner", cascade={CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private List<Pet> pets;
public Owner(String name) {
this.name = name;
}
public Owner() {
}
除了我期望在 Pet 表中的外键之外,所有内容都生成了。
【问题讨论】:
-
保存这些 Owner 和 Pet 对象的代码是什么?
-
你为什么要问?我还没有创建服务/DAO 层,因为我只是想建立架构。
-
哦。我误解了你的问题。对于那个很抱歉 。我现在知道你的意思了
-
hibernate 使用什么方言(在应用程序启动期间记录)?如果在 application.properties 中启用 spring.jpa.show-sql=true,是否有任何关于外键的日志?对于测试 h2 数据库,我可以看到外键的正确创建。
-
默认使用 MySQL5Dialect。我改成MySQL8Dialect,外键终于加进去了。
标签: mysql hibernate spring-boot