Hibernate cf ORM-在新实体的entitySave()之后立即访问生成的属性
我正在创建一个新实体,使用entitySave()保存它,然后希望在页面请求完成之前获取该实体的ID 当我在ID上运行getter时,它返回“0”,但当我检查时,数据库已经生成了ID 以下是我的模型中的属性声明: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
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是属性名)。