Skip to content

NH-3576 - session load exception with enableFilter #1324

Closed
@nhibernate-bot

Description

@nhibernate-bot

gaudi created an issue — 8th December 2013, 5:09:42:

demo explain:
The BaseOn property of Pricelist is also a Pricelist class, but its property is null.

session.EnableFilter("tenant").SetParameter("id", tenantId);
session.Load<Pricelist>(pricelistId);

output:
NHibernate.Test.NHSpecificTest.NH1234.SampleTest.ShouldBeLoadedWithoutException:
NHibernate.ObjectNotFoundException : No row with the given identifier exists<NHibernate.Test.NHSpecificTest.NH1234.Pricelist#1>


EXPECTED: 
SELECT pricelist0_.ID as ID0_2_, pricelist0_.TENANT_ID as TENANT2_0_2_, pricelist0_.BASED_ON as BASED3_0_2_, 
        pricelist0_.NAME as NAME0_2_, pricelist0_.PRECISION as PRECISION0_2_, pricelist0_.IS_ACTIVE as IS6_0_2_, 
        tenant1_.ID as ID1_0_, tenant1_.NAME as NAME1_0_, tenant1_.BASE_URL as BASE3_1_0_, tenant1_.TITLE as TITLE1_0_, 
        tenant1_.THEME as THEME1_0_, pricelist2_.ID as ID0_1_, pricelist2_.TENANT_ID as TENANT2_0_1_, 
        pricelist2_.BASED_ON as BASED3_0_1_, pricelist2_.NAME as NAME0_1_, pricelist2_.PRECISION as PRECISION0_1_, pricelist2_.IS_ACTIVE as IS6_0_1_ 
FROM Pricelists pricelist0_ 
inner join Tenants tenant1_ on pricelist0_.TENANT_ID=tenant1_.ID 
left outer join Pricelists pricelist2_ on pricelist0_.BASED_ON=pricelist2_.ID and pricelist2_.TENANT_ID = @p0
WHERE tenant1_.ID = @p0 AND pricelist0_.ID=@p2;
@p0 = 1 [Type: Int64 (0)], @p2 = 1 [Type: Int64 (0)]

BUT:

 SELECT pricelist0_.ID as ID0_2_, pricelist0_.TENANT_ID as TENANT2_0_2_, pricelist0_.BASED_ON as BASED3_0_2_, 
        pricelist0_.NAME as NAME0_2_, pricelist0_.PRECISION as PRECISION0_2_, pricelist0_.IS_ACTIVE as IS6_0_2_, 
        tenant1_.ID as ID1_0_, tenant1_.NAME as NAME1_0_, tenant1_.BASE_URL as BASE3_1_0_, tenant1_.TITLE as TITLE1_0_, 
        tenant1_.THEME as THEME1_0_, pricelist2_.ID as ID0_1_, pricelist2_.TENANT_ID as TENANT2_0_1_, 
        pricelist2_.BASED_ON as BASED3_0_1_, pricelist2_.NAME as NAME0_1_, pricelist2_.PRECISION as PRECISION0_1_, pricelist2_.IS_ACTIVE as IS6_0_1_ 
FROM Pricelists pricelist0_ 
inner join Tenants tenant1_ on pricelist0_.TENANT_ID=tenant1_.ID 
left outer join Pricelists pricelist2_ on pricelist0_.BASED_ON=pricelist2_.ID
WHERE tenant1_.ID = @p0 and pricelist2_.TENANT_ID = @p0 AND pricelist0_.ID=@p2;
@p0 = 1 [Type: Int64 (0)], @p2 = 1 [Type: Int64 (0)]

gaudi added a comment — 8th December 2013, 9:12:23:

Sorry, I didn't say it clearly.
the following code:

object tenantId;
object pricelistId;

using (ISession session = this.OpenSession())
{
    Tenant tenant = new Tenant();
    tenant.Name = "gaudi";
    tenant.BaseUrl = "http://localhost:8061/gaudi";
    tenant.Theme = "gaudi";
    tenant.Title = "gaudi";
    tenantId = session.Save(tenant);

    Pricelist pricelist = new Pricelist();
    pricelist.Tenant = tenant;
    pricelist.Name = "sales";
    pricelist.Precision = 2;
    pricelist.IsActive = true;
    pricelistId = session.Save(pricelist);

    session.Flush();
}

using (ISession session = this.OpenSession())
{
    session.EnableFilter("tenant").SetParameter("id", tenantId);
    session.Load<Pricelist>(pricelistId);  //--> should be exists, but not found.
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions