2011-09-30 37 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(实体)