我有一个带有@GeneratedValue()的实体。我知道有不同的生成类型。我的问题是:当我创建实体的新示例时,是否有生成类型生成ID?我需要我的对象的ID来创建另一个ID为FK的对象,但我不想在创建另一个对象之前持久化对象。感谢帮助!
rkkpypqq1#
你根本不必担心获取生成的ID。只需在Java端设置对象关系(使用setter方法),并在persist() JPA上确保生成的PK被设置为依赖对象上的FK。给予一个例子,如果您有以下实体类
persist()
@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();
型
umuewwlo2#
您可以调用store()方法。Store方法还不会将对象持久化在数据库中。它在休眠缓存层中创建一个代理对象,并返回该代理对象,并填充主键(是的,自动生成的值可用)。您可以根据需要将此值用于其他对象。一旦完成,当您刷新会话时,所有对象都会持久化在数据库中。这个答案现在已经过时了,因为“store”功能已经不存在了。它需要被删除,但我不能这样做,因为这是被接受的答案。
store()
2条答案
按热度按时间rkkpypqq1#
你根本不必担心获取生成的ID。只需在Java端设置对象关系(使用setter方法),并在
persist()
JPA上确保生成的PK被设置为依赖对象上的FK。给予一个例子,如果您有以下实体类
字符串
您可以将它们持久化(不用担心主键),
型
umuewwlo2#
您可以调用
store()
方法。Store方法还不会将对象持久化在数据库中。它在休眠缓存层中创建一个代理对象,并返回该代理对象,并填充主键(是的,自动生成的值可用)。您可以根据需要将此值用于其他对象。一旦完成,当您刷新会话时,所有对象都会持久化在数据库中。这个答案现在已经过时了,因为“store”功能已经不存在了。它需要被删除,但我不能这样做,因为这是被接受的答案。