2013-07-25 95 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