2012-03-15 193 views
1

具有1個參數的EntityLoad應該返回表中的所有記錄。ColdFusion的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

我強烈建議您查看布萊恩鐵克這些博客文章 - http://www.briankotek.com/blog/index.cfm/ObjectRelational-Mapping - 關於ORM會話。馬克曼德爾在這個話題上也有一些很好的帖子。 – Antony 2012-03-16 03:15:26

回答

1

這與Hibernate會話以及實際保存實體的SQL運行時有關。我不是專家,所以很難解釋'工作流程'。

我用來解決此問題的一種方法是將entitySave()包裝在事務中。

transaction{ 
    EntitySave(local.e); 
} 
+0

啊,那有效。從進一步閱讀來看,默認行爲是在每個請求的末尾執行ORMFlush()。部分我仍然不明白,但是爲什麼其他電話能夠在相同的請求中提取新記錄。 – Jere 2012-03-15 15:47:56

2

Hibernate不保留任何數據,直到請求結束,所以你不能在相同的請求中檢索到EntitySave()d的記錄。

您可以在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"));