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