1

我有一个带有@GeneratedValue() 的实体。我知道有不同的世代类型。我的问题是:当我创建实体的新实例时,是否有生成 ID 的生成类型?我需要我的对象的 ID 来创建另一个 ID 为 FK 的对象,但我不想在创建另一个对象之前保留 objekt。感谢帮助!

4

2 回答 2

0

您可以调用该store()方法。Store 方法还没有将对象保存在数据库中。它在休眠缓存层中创建一个代理对象并返回该代理对象,并填充主键(是的,自动生成的值可用)。您可以根据需要将此值用于其他对象。完成后,当您刷新会话时,所有对象都将保留在数据库中。

于 2013-10-15T11:12:35.947 回答
0

您根本不必担心获取生成的 ID。只需在 Java 端设置对象关系(使用 setter 方法),在persist()JPA 上将确保生成的 PK 设置为依赖对象上的 FK。

举个例子,如果你有以下实体类

@Entity
public class PKClass {

    @Id @GeneratedValue
    @Column(name = "PK_ID")
    private Long id;

    // getters/setters
}

@Entity
public class FKClass {

    @Id @GeneratedValue
    @Column(name = "FK_ID")
    private Long id;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "PK_ID")
    private PKClass pk;

    // getters/setters
}

您可以将它们持久化(无需担心主键)

// create a new transaction
EntityTransaction tx = em.getTransaction();
tx.begin();

// setup Java relationships
PKClass pk = new PKClass();
FKClass fk = new FKClass();
fk.setPK(pk);

// persist
em.persist(fk);

// close transaction
tx.commit();
于 2013-10-15T11:08:53.727 回答