2

我正在创建一个新实体,使用 entitySave() 保存它,然后希望在页面请求完成之前获取该实体的 ID。

当我在 ID 上运行 getter 时,它返回“0”,但是当我检查时,数据库已经生成了 ID。

这是我的模型中的属性声明:

property name="id" fieldtype="id" generator="identity" column="member_id";

我创建并保存实体,然后尝试访问新的实体 ID:

newProfile = entityNew("member");
newProfile.setMemento(args); // a helper method to populate the entity
entitySave(newProfile);

//ormFlush() // have tried this, but makes no difference
//ormReload(newProfile) //  have tried this, but no difference

//I now want to access the ID of the new profile, but it is returning '0'
newProfileID = newProfile.getID();

也试过这个没有成功

transaction {
        entitySave(newProfile);
    }

    writeDump(newProfile);

关于我可能在这里遗漏的任何指示?

非常感谢!

**更新* * 它看起来像是列映射的问题。如果我将属性名称更改为“id”以外的任何名称,它就可以正常工作。仅当属性名称为“id”时,该属性才不会获取生成的值:

此配置的 getID() 值为 0:

property name="id" fieldtype="id" generator="identity" column="member_id";

将属性名称更改为“id”以外的名称会返回数据库中 member_id 的值。

property name="myid" fieldtype="id" generator="identity" column="member_id";
4

2 回答 2

1

您需要强制 Hibernate 立即运行查询,因为默认情况下,查询会在请求结束时运行。

你可以试试:

transaction{
    entitySave(newProfile);
}

或者

entitySave(newProfile);
ORMFlush();

其中任何一个都会导致 Hibernate 在您需要时运行查询。

于 2012-08-27T03:20:18.190 回答
1

我能找到的唯一解决方案是......

它看起来像列映射的问题。如果我将属性名称更改为 "id" 以外的任何名称,它就可以正常工作。仅当属性名称为“id”时,该属性才不会获取生成的值:

此配置的 getID() 值为 0:

property name="id" fieldtype="id" generator="identity" column="member_id";

将属性名称更改为“id”以外的名称会返回数据库中 member_id 的值:

property name="myid" fieldtype="id" generator="identity" column="member_id";
于 2014-04-30T04:21:55.827 回答