2012-03-31 77 views
1

對不起,不清楚如何提出這個問題。這裏是我的情況:JPA:插入後如何獲取更新的實體對象?

控制器

HostSite hostSite=new HostSite(); 
hostSite.setUrl("www.somesite.com"); 
// hostSite.getId() is null, naturally 
hostSiteService.saveHostSite(hostSite); 
// hostSite.getId() is still null 

HostSiteServiceImpl

public void saveHostSite(HostSite hostSite) { 
    hostSiteDAO.save(hostSite); 
} 

HostSiteDAOImpl

public void save(HostSite hostSite) { 
    if(hostSite!=null) { 
     getEntityManager().merge(hostSite); 
    } 
} 

正如你所看到的,我沒有在任何地方修改實體對象引用。我更喜歡合併操作會更新持久化對象的數據已在表級初始化。在我的情況下,它只是自動生成的ID。但也可能有其他的東西,比如創建時間戳等等。是否有我需要做的事情,讓這個生成的id在持久對象上設置?操作本身沒有問題。記錄與生成的ID一起保存在表格中。

我使用Hibernate 4作爲JPA提供程序。

回答

5

'merge()返回新的實例,所以只是讓每個方法返回您的實體