Java @创建新实例时生成的值

Java @创建新实例时生成的值,java,jpa,Java,Jpa,我有一个带有@GeneratedValue()的实体。我知道有不同的一代人。我的问题是:当我创建实体的新实例时,是否存在生成ID的生成类型?我需要我的对象的id来创建另一个id为FK的对象,但我不想在创建另一个对象之前保留该对象。谢谢你的帮助 您根本不必担心获取生成的ID。只需在Java端(使用setter方法)和persist()JPA上设置对象关系,即可确保生成的PK在依赖对象上设置为FK 举个例子,如果您有以下实体类 @Entity public class PKClass {

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

您根本不必担心获取生成的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
}
您可以将它们持久化(不必担心主键)为


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

这是特定于
Hibernate
的,不允许跨不同的ORMs移植应用程序,这就是为什么通常首先使用
JPA
// 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();