cf ORM - 在新实体上的entitySave()之后立即访问生成的属性

时间:2012-08-27 01:40:34

标签: hibernate coldfusion

我正在创建一个新实体,使用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);

关于我在这里可能缺少什么的任何指示?

非常感谢!

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

此配置的getID()值为0:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

您可以尝试:

transaction{
    entitySave(newProfile);
}

或者

entitySave(newProfile);
ORMFlush();

其中任何一个都会导致Hibernate在你想要的时候运行查询。

答案 1 :(得分:1)

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

它看起来像列映射的问题。如果我将属性名称更改为" id" 以外的其他名称,则可以正常使用。仅当属性名称为" id"该物业没有提取产生的价值:

此配置的getID()值为0:

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

将属性名称更改为' id'以外的其他名称返回DB中的member_id值:

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