2010-06-11 74 views
0

我在GWT项目中使用datanucleus和jdo。我如何与makePersistent这个()Datanucleus JDO检索新生成的主键

编辑 我们使用注解将一个元素增加到数据库后检索生成的主键,这里是主键:

@PrimaryKey 
@Column(name = "id_bla", allowsNull = "false") 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY, extensions = { @Extension(vendorName = "datanucleus", key = "strategy-when-notnull", value = "false") }) 
private Long idBla; 

我不是一个谁做了映射,我还没有得到所有这一切。

回答

0

对象的关键应该当它持续被自动设置:

MyObject obj = new MyObject(); 
Long id = obj.getId(); // WRONG! Will still be null. 
pm.makePersistent(obj); 
id = obj.getId(); // Correct. 
+0

感谢您的回答。这是我期望的行为,但在我的“makePersistent(obj)”之后,我的obj.getId()仍为空...虽然DB中的id已正确生成,并且所有其他数据都正常保存。 – Jla 2010-06-14 07:14:25

+0

您使用注释或XML吗?如果ID出现在数据库中,那么注释(如identityType,valueStrategy等)可能是正确的。 getObjectById()是否工作?检查getId()中的拼写错误! – 2010-06-14 09:26:37

+0

我使用注释(我编辑了我的帖子)。这是生成ID的DB,因此我无法在makePersitent后面检索它。我只是用DB中的ID尝试getObjectById(),但我得到了“没有这样的数据库行”异常。当我通过正确检索ID查询所有结果时。 – Jla 2010-06-16 07:25:57