Gwt Datanucleus JDO检索新生成的主键

Gwt Datanucleus JDO检索新生成的主键,gwt,primary-key,jdo,datanucleus,Gwt,Primary Key,Jdo,Datanucleus,我正在GWT项目中使用datanucleus和jdo。在使用makePersistent()向数据库添加元素后,如何检索生成的主键 编辑 我们使用注释,这里是主键: @PrimaryKey @Column(name = "id_bla", allowsNull = "false") @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY, extensions = { @Extension(vendorName = "datanu

我正在GWT项目中使用datanucleus和jdo。在使用makePersistent()向数据库添加元素后,如何检索生成的主键

编辑 我们使用注释,这里是主键:

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

我不是进行映射的人,我还没有得到所有这些信息。

对象的密钥应该在持久化时自动设置:

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

谢谢你的回答。这是我所期望的行为,但在我的“makePersistent(obj)”之后,我的obj.getId()仍然为null。。。数据库中的id正确生成,所有其他数据正常保存。您使用的是批注还是XML?如果ID出现在数据库中,那么注释(如identityType、valueStrategy等)大概是正确的。getObjectById()有效吗?检查getId()中是否有输入错误!我使用注释(我编辑了我的文章)。是DB生成了ID,因此我的ID可能是我无法在MakePersistent之后检索它的原因。我刚刚尝试了使用DB中的ID获取ObjectById(),但得到了“没有这样的数据库行”异常。当我通过正确检索ID来查询所有结果时,这些注释看起来是正确的-IdGeneratorStrategy.IDENTITY表示JDO应该允许数据库生成ID)。您的类是否也被注释为@PersistenceCapable(identityType=identityType.APPLICATION)?最后,查看在obj被持久化后pm.getObjectId(obj)返回的值。