【问题标题】:Datanucleus JDO Retrieve newly generated primary keyDatanucleus JDO 检索新生成的主键
【发布时间】:2010-06-11 08:27:44
【问题描述】:

我在 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;

我不是做映射的人,我还没有得到所有这些。

【问题讨论】:

    标签: gwt primary-key jdo datanucleus


    【解决方案1】:

    对象的key应该在持久化的时候自动设置:

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

    【讨论】:

    • 感谢您的回答。这是我所期望的行为,但在我的“makePersistent(obj)”之后,我的 obj.getId() 仍然为空......虽然数据库中的 id 已正确生成并且所有其他数据都正常保存。
    • 您使用的是注解还是 XML?如果 ID 出现在数据库中,那么注释(如 identityType、valueStrategy 等)可能是正确的。 getObjectById() 有效吗?检查 getId() 中的拼写错误!
    • 我使用注释(我已经编辑了我的帖子)。生成 ID 的是数据库,因此我是在 makePersitent 之后无法检索它的原因。我刚刚使用数据库中的 ID 尝试了 getObjectById(),但我得到了“没有这样的数据库行”异常。当我查询所有结果时,虽然 ID 被正确检索。
    • 那些注释看起来是正确的 - IdGeneratorStrategy.IDENTITY 表明 JDO 应该允许数据库生成 ID)。你的班级是否也注释了@PersistenceCapable(identityType=IdentityType.APPLICATION)?最后看看 obj 持久化后 pm.getObjectId(obj) 返回什么值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多