我有一个带有@GeneratedValue()的实体。我知道有不同的世代类型。我的问题是:当我创建实体的新实例时,是否存在生成ID的代典型?我需要我的对象的id来创建另一个id为FK的对象,但是我不想在创建另一个对象之前坚持objekt。谢谢你的帮助!
答案 0 :(得分: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();
答案 1 :(得分:0)
您可以调用store()
方法。存储方法尚未将对象保留在DB中。它在hibernate缓存层中创建一个代理对象,并返回该代理对象,并填充主键(是的,自动生成的值可用)。您可以根据需要将此值用于其他对象。完成后,当您刷新会话时,所有对象都会保留在数据库中。