2013-10-15 173 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();