ColdFusion的EntityLoad缺少最后一条记录

时间:2012-03-15 14:50:38

标签: hibernate orm coldfusion

带有1个参数的EntityLoad应该返回表中的所有记录。

但是,如果我在EntityNew和EntitySave(插入新记录)之后立即调用它,结果中似乎缺少最后一条记录。

如果我传入过滤器或者我调用EntityLoadByPk,我会将记录恢复正常。我意识到有人可能不希望在同一个请求中插入一条记录,但我仍然想知道这里发生了什么。

local.e = EntityNew("e");
local.e.setDescription("lorem ipsum");
EntitySave(local.e);
local.id = local.e.getId();

//fails to get record inserted above
dump(EntityLoad("e"));

//gets record inserted above successfully
dump(EntityLoadByPk("e", local.id));

2 个答案:

答案 0 :(得分:2)

Hibernate不会在请求结束时保留任何数据,因此您无法在同一请求中检索已经是EntitySave()的记录。

您可以在entitySave()之后和entityLoad()之前运行ORMFlush()。

local.e = EntityNew("e");
local.e.setDescription("lorem ipsum");
EntitySave(local.e);
local.id = local.e.getId();

//persist any dirty records so they are loaded in the next EntityLoad()
ORMFlush();

//fails to get record inserted above
dump(EntityLoad("e"));

答案 1 :(得分:1)

这与Hibernate会话以及保存实体的SQL实际运行时有关。我不是专家,因此很难解释“工作流程”。

我用来解决这个问题的一种方法是将entitySave()包装在一个事务中。

transaction{
    EntitySave(local.e);
}