带有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));
答案 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);
}