2012-03-03 74 views
0

如何在模型中設置ID?我試試這個代碼:如何用我的ID保存實體

public Community(Long id, ...) { 
    this.id = id; 
    .... 
} 

但是,當我這樣做:

Communtiy c = new (1, ...); 
c.save(); 

休眠說:

Execution exception PersistenceException occured : org.hibernate.PersistentObjectException: detached entity passed to persist: models.Community 
+0

請提供關於'Model'信息。你正在使用什麼樣的代碼類型? 這個問題看起來類似於你的http://stackoverflow.com/questions/2108178/id-generatedvalue-but-set-own-id-value。 – Thor 2012-03-03 07:40:01

+0

@elmes只是累了) – 2012-03-03 10:34:25

回答

2

您可以通過擴展從play.db.jpa.GenericModel而不是play.db.jpa.Model來完成此操作。這將允許您手動設置主鍵。

事實上,什麼Model確實是從GenericModel延伸,並且因爲它是非常常見的這樣做Model自動生成主鍵(通過使用@Id @GeneratedValue public Long id)。但是,如果出於任何原因你想設置一個自定義主鍵,那麼從GenericModel延伸是一條路。

Official documentation here.

@Entity 
public class Community extends GenericModel { 
    @Id 
    public Long id; 

    public Community (Long id) { 
     this.id = id; 
    } 
} 
+1

謝謝!這個解決方案對我有幫助。 – 2012-03-03 14:09:26

0

儘量不要設置id你自己,id應加載到模型後,保存。

+0

我想使用來自Facebook的ID – 2012-03-03 10:32:27

+0

,但我認爲你模型中的'id'屬性映射到你的數據庫的'id'。如果您想在數據庫中存儲Facebook'id',則可以在課程中創建另一個字段,例如'fbid'。 – IProblemFactory 2012-03-03 10:50:16