2013-10-15 134 views
1

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

回答

0

可以调用store()方法。 Store方法不会将对象保存在数据库中。它在hibernate缓存层创建一个代理对象,并返回代理对象,并填充主键(是的,自动生成的值可用)。你可以使用这个值作为你想要的其他对象。完成之后,刷新会话时,所有对象都会保留在数据库中。

+0

多数民众赞成我需要,谢谢。 – kai

+0

这是'Hibernate'特有的,不会让你将应用程序移植到不同的ORM上,这就是为什么通常首先使用JPA的原因。 –

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();