Skip to content

NH-3469 - Impossible to load one-to-one association with LINQ for composite-id #1309

@nhibernate-bot

Description

@nhibernate-bot

Igor Kiselev created an issue — 29th May 2013, 5:28:56:

When you use one-to-one mapping for object, that have with LINQ provider it's impossible to load property that contains associated object if it is not explicitly loaded in select clause.

Example:

 <class name="ExternalField">
   <composite-id>
     <key-property name="Id" />
     <key-property name="Id2" />
  </composite-id>
</class>

<class name="Field">
  <composite-id>
    <key-property name="Id" />
    <key-property name="Id2" />
  </composite-id>        
  <one-to-one name="ExternalField" lazy="false" fetch="join" />
</class>
var fields = session.Query<Field>()
  .ToList()
  .Where(it => it.ExternalField != null).ToList();

There will be no object in final list, even if DB have such. Same queries work when using NHibernate.Linq.


Ricardo Peres added a comment — 29th May 2013, 9:49:11:

If you take out the first ToList() on your LINQ query, the problem appears:

var fields = session.Query<Field>().Where(it => it.ExternalField != null).ToList();
select
    field0_.Id as Id1_,
    field0_.Id2 as Id2_1_
from
    Field field0_
where
    (
        field0_.Id, field0_.Id2
    ) is not null

NHibernate is building a wrong SQL.


Alexander Zaytsev added a comment — 29th May 2013, 23:25:20:

The problem in HQL

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions