2013-07-25 75 views
2

後如何JPA如何堅持

entityManager.persist 

我能夠調用後,從數據庫中獲得主鍵值後得到其保存到數據庫中的值從數據庫中獲得的價值堅持沒有任何其他值。 例如

public void create(Project project) { 
    entityManager.persist(project);  
    System.out.println("Id -- " + project.getProjectId()); 
    System.out.println("no -- " + project.getProjectNo()); 
} 

從上面的代碼我能夠得到project.getProjectId新插入值,但沒能獲得project.getProjectNo

之所以我能夠得到projectId是因爲它是主鍵?

如何在持續後得到getProjectNo的值?

+0

是ProjectNo產生的價值呢?你確定它是在電話會議之前設定的嗎?值是否出現在數據庫中?如果它沒有生成並且您設置了該值,那麼orm不應該將該字段清空。 –

+0

@KevinBowersox'projectNo'是使用數據庫觸發器的數據庫生成值。 – user75ponic

+0

您將需要設置一個序列發生器。它可能與身份一起工作,因爲這假定數據庫將按照觸發器的設置在插入中設置ID。 – Chris

回答

5

嘗試使用數據庫刷新實體以獲取插入的觸發器值。

public void create(Project project) { 
     entityManager.persist(project); 
     entityManager.getTransaction().commit(); 
     project = entityManager.find(Project.class, project.getProjectId()); 
     entityManager.refresh(project); 
     System.out.println("Id -- " + project.getProjectId()); 
      System.out.println("no -- " + project.getProjectNo()); 
    } 

Documentation

+0

@Polppan任何運氣? –

+0

刷新將無法工作,除非它具有要在刷新查詢中使用的標識。 – Chris

+0

Kevin添加'entityManager.refresh'導致以下異常'org.hibernate.HibernateException:這個實例在數據庫中不存在作爲一行' – user75ponic