我有两个简单的类Automobil和Ford,它们将记录添加到我的数据库关系OneToOne中。当我检查结果时,我看到密钥没有依次添加。当我将记录添加到存储有Ford表外键的Automobil表时,我看到汽车记录的ID号是1,而表Ford是2,然后是汽车3和Ford 4,为什么会发生这种情况?

汽车类

@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;
}

}


主类

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“更改表automobil删除外键FKovj5b90x7jrtqauuchxruywn3”时出错

因此,一切似乎都很好。

您可以删除@JoinColumn,因为您无需设置任何列名。

10-06 06:16