2011-09-30 35 views
0

我有一個應用程序將實體存儲到數據庫。我在下一步做到這一點:如何獲得合併的JPA實體的ID

class Entity { 
    privete id; 
    String somePropertie; 
    // getters and setters 
} 
// In main class 
Entity newEntity = new Entity(); 
newEntity.setSomePropertie("somePropertie"); 
Entity entity = entityManager.merge(newEntity); 
System.out.println("This is id of stored entity:", entity.getId()) 

這裏沒有寫jpa註解。但實體存儲到數據庫,但打印的ID是0;我使用春季驅動的事務,我需要這個實體用於實體ID的後續更新。

+0

如果返回的ID爲0,那麼它的ID必須真的是0.你檢查過數據庫嗎?身份證是如何產生的?你應該提供真實的代碼和映射。 –

+0

ID是503,我使用的是hibernate,但實體管理器是從spring開始的:** org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean ** –

+2

提供真正的代碼和映射。向我們展示表格定義以及ID生成的配置方式。告訴我們你正在使用哪個數據庫。 –

回答

0

糾正我,如果我錯了,但你

Entity entity = entityManager.merge(newEntity); 
System.out.println("This is id of stored entity:", entity.getId()) 

在同一事務試過嗎?

也可以嘗試設置ID來Long,而不是long(或Integer而不是int;目前還不清楚從你的定義)

1

EntityManager.merge(..)獲取一個實例,並返回被管理的實例。而在短暫的實例的情況下,它會返回一個新的實例(不修改原)

所以你mergeEntity(..)方法應該返回em.merge(實體)