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

Hibernate cf ORM-在新实体的entitySave()之后立即访问生成的属性,hibernate,coldfusion,Hibernate,Coldfusion,我正在创建一个新实体,使用entitySave()保存它,然后希望在页面请求完成之前获取该实体的ID 当我在ID上运行getter时,它返回“0”,但当我检查时,数据库已经生成了ID 以下是我的模型中的属性声明: property name="id" fieldtype="id" generator="identity" column="member_id"; 我创建并保存实体,然后尝试访问新的实体ID: newProfile = entityNew("member"); newProfile

我正在创建一个新实体,使用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";
property name="id" fieldtype="id" generator="identity" column="member_id";
将属性名称更改为“id”以外的其他名称将返回DB中的member_id的值

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

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

您可以尝试:

transaction{
    entitySave(newProfile);
}


这两种方法都会导致Hibernate在需要时运行查询。

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

这看起来像是列映射的问题。如果我将属性名称更改为除“id”以外的任何名称,则可以正常工作。只有当属性名为“id”时,该属性才不会拾取生成的值:

此配置的getID()值为0:

property name="id" fieldtype="id" generator="identity" column="member_id";
property name="id" fieldtype="id" generator="identity" column="member_id";
将属性名称更改为“id”以外的其他名称将返回数据库中成员id的值:

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

谢谢你,斯科特。这就是我所想的,但这两种方法(在事务中包装,或在保存后进行大量操作)都不起作用。见编辑后的问题。谢谢当我在使用MySQL的简单测试应用程序中使用您的代码时,属性名“id”对我来说很有用。你用的是什么数据库?你能发布你的application.cfc或msettings以及更多的“member”组件定义吗?FWIW,如果你确实需要/想要一个getId方法,你可以向对象添加一个简单的别名函数,即:
函数getId(){return getMemberId();}
(其中MemberId是属性名)。