3

エンティティでlazyloadプロパティを使用しています。正しく動作しますが、このクラスのプロパティがメソッドを介して変更された場合、NHibernateは更新を行いません。プロパティが直接変更された場合は、すべて問題ありません。

怠惰なプロパティの場合、プロキシオブジェクトが返され、このプロキシが内部の変更を処理しないという問題があると思います。

以下にテストコードを追加しました。NHibernate 3.1では正常に動作しますが、NHibernate3.2および3.3では更新が呼び出されません

多分誰かがこの問題を解決する方法を知っていますか?

ありがとう。

実在物:

/// <summary>
/// Class for testing lazy properties.
/// </summary>
public class TestClass
{
    public virtual int Id { get; set; }
    public virtual string LazyData { get; set; }
    public virtual string TestData { get; set; }

    public virtual void ChangeTestData(string data)
    {
        TestData = data;
    }
}

マッピング:

public class TestClassMap : ClassMap<TestClass>
{
    public TestClassMap()
    {
        Id(m => m.Id);
        Map(m => m.LazyData).LazyLoad();
        Map(m => m.TestData);
    }
}

テストコード:

[Test]
public void LazyProperityTest1()
{
    var testObj = new TestClass();
    Session.Save(testObj);
    Session.Flush();
    Session.Clear();

    // Change property and flush session.
    var persistedObj = Session.CreateCriteria<TestClass>().List<TestClass>().First();
    persistedObj.ChangeTestData("test");

    Session.Flush();
    Session.Clear();
}

LazyLoadが設定されている場合に生成されるSQLリクエスト:

NHibernate: INSERT INTO "TestClass" (LazyData, TestData) VALUES (@p0, @p1); select last_insert_rowid();@p0 = NULL [Type: String (0)], @p1 = NULL [Type: String (0)]
NHibernate: SELECT this_.Id as Id0_0_, this_.TestData as TestData0_0_ FROM "TestClass" this_

LazyLoadが設定されていない場合に生成されるSQLリクエスト:

NHibernate: INSERT INTO "TestClass" (LazyData, TestData) VALUES (@p0, @p1); select last_insert_rowid();@p0 = NULL [Type: String (0)], @p1 = NULL [Type: String (0)]
NHibernate: SELECT this_.Id as Id0_0_, this_.LazyData as LazyData0_0_, this_.TestData as TestData0_0_ FROM "TestClass" this_
NHibernate: UPDATE "TestClass" SET LazyData = @p0, TestData = @p1 WHERE Id = @p2;@p0 = NULL [Type: String (0)], @p1 = 'test' [Type: String (0)], @p2 = 1 [Type: Int32 (0)]
4

1 に答える 1

1

これは間違いなくバグのように見えますが、それを証明するための適切なテスト ケースがあります。

https://nhibernate.jira.com/で問題を入力してください。

于 2013-03-14T12:41:30.420 に答える