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