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