jpa 创建新示例时@GeneratedValue

cl25kdpy  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(43)

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

rkkpypqq

rkkpypqq1#

你根本不必担心获取生成的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();

umuewwlo

umuewwlo2#

您可以调用store()方法。Store方法还不会将对象持久化在数据库中。它在休眠缓存层中创建一个代理对象,并返回该代理对象,并填充主键(是的,自动生成的值可用)。您可以根据需要将此值用于其他对象。一旦完成,当您刷新会话时,所有对象都会持久化在数据库中。
这个答案现在已经过时了,因为“store”功能已经不存在了。它需要被删除,但我不能这样做,因为这是被接受的答案。

相关问题