休眠一对一关系表中的键问题



我有两个简单的类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,因为您没有设置任何列名称。

最新更新