我有两个简单的类Automobil和Ford,它们是将记录添加到我的数据库关系OneToOne。当我检查结果时,我看到键没有依次添加。当我向 Automobil 表添加一条将外键存储到 Ford 表的记录时,我看到汽车记录的 ID 号是 1,而表 Ford 2,然后是汽车 3 和福特 4 为什么会发生这种情况?
汽车.class
@Entity(name = "Automobil")
@Table(name = "automobil")
public class Automobil {
@Id
@GeneratedValue
private long id;
private String auto;
@OneToOne
@JoinColumn
private Ford ford;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getAuto() {
return auto;
}
public void setAuto(String auto) {
this.auto = auto;
}
public Ford getFord() {
return ford;
}
public void setFord(Ford ford) {
this.ford = ford;
}
}
福特级
@Entity(name = "Ford")
@Table(name = "ford")
public class Ford {
@Id
@GeneratedValue
private long id;
private String model;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
}
主.class
public class Main {
public static void main(String[] args) {
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("tutorialdb");
EntityManager entityManager = entityManagerFactory.createEntityManager();
Automobil auto = new Automobil();
Ford ford = new Ford();
auto.setAuto("Ford");
auto.setFord(ford);
ford.setModel("Mustang");
entityManager.getTransaction().begin();
entityManager.persist(auto);
entityManager.persist(ford);
entityManager.getTransaction().commit();
entityManager.close();
entityManagerFactory.close();
}
}
结果:汽车表
id=1 auto=Ford ford_id=2
id=3 auto=Ford ford_id=4
结果:福特表
id=2 model=mustang
id=4 model=fiesta
由于某种原因,密钥不会创建,为什么会发生这种情况?
Error executing DDL "alter table automobil drop foreign key FKovj5b90x7jrtqauuchxruywn3" via JDBC Statement
这说明它没有删除而不是不创建!
通过 JDBC 语句执行 DDL "alter table automobildrop外键 FKovj5b90x7jrtqauuchxruywn3" 时出错
所以一切似乎都很好。
您可以删除@JoinColumn,因为您没有设置任何列名称。