2012-03-15 7 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

は、私は非常にブライアンKotekからこれらのブログの記事を見直しお勧めします。 Mark Mandelには、このトピックについての良い記事もいくつかあります。 – Antony

答えて

1

これは、Hibernateセッションと、エンティティを保存するSQLが実際に実行されるときに関係します。私は専門家ではなく、「ワークフロー」を説明するのは難しいです。

この問題を回避するために使用する1つの方法は、トランザクションでentitySave()をラップすることです。リクエストが終了datauntil

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

ああ、それは働いた。少し読めば、デフ​​ォルトの動作は各リクエストの終わりにORMFlush()を行うことです。私がまだ理解していない部分は、他の呼び出しが同じ要求で新しいレコードを受け取ることができた理由です。 – Jere

2

は、Hibernateはいずれも保持されませんので、あなたは同じ要求にEntitySave()Dとなっているレコードを取得することはできません。

ORMFlush()は、entitySave()の後とentityLoad()の前に実行できます。 ORMセッションについて - http://www.briankotek.com/blog/index.cfm/ObjectRelational-Mapping -

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")); 
関連する問題