I've upgrade a project of mine from NH2 to NH3 and now get an error. So I
created a testcase reduction - but I can't believe this is a bug - at least
not one that would have got into a release. I'd like to know if I'm being
stupid before I create a new JIRA report. What is wrong with this code? The
error produced is:
14:51:43,918 DEBUG SQL:0 -
SELECT
e1x1_.id as y0_
FROM
Entity2 this_
14:51:44,480 WARN ADOExceptionReporter:0 -
System.Data.SqlClient.SqlException: The multi-part identifier "e1x1_.id"
could not be bound.
[Test]
public void ShouldContainJoin()
{
using (var session = OpenSession())
{
using (var ls = new SqlLogSpy())
{
ICriteria criteria =
session.CreateCriteria(typeof(Entity2), "e2")
.CreateAlias("e2.Entity1", "e1")
.SetProjection(Projections.Property("e1.Id"));
criteria.List<Guid>();
}
}
}
-------
public class Entity1
{
public virtual Guid Id { get; set; }
}
public class Entity2
{
public virtual Entity1 Entity1 { get; set; }
public virtual Entity3 Entity3 { get; set; }
public virtual bool Equals(Entity2 other)
{
if (ReferenceEquals(null, other))
{
return false;
}
if (ReferenceEquals(this, other))
{
return true;
}
return Equals(other.Entity1, Entity1) && Equals(other.Entity3,
Entity3);
}
public override bool Equals(object obj)
{
return Equals(obj as Entity2);
}
public override int GetHashCode()
{
unchecked
{
return ((Entity1 != null ? Entity1.GetHashCode() : 0) * 397)
^ (Entity3 != null ? Entity3.GetHashCode() : 0);
}
}
}
public class Entity3
{
public virtual Guid Id { get; set; }
}
-----
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NHibernate.Test"
namespace="NHibernate.Test.NHSpecificTest.NHXXXX">
<class name="Entity1" table="Entity1">
<id name="Id" type="Guid" column="id">
<generator class="guid" />
</id>
</class>
<class name="Entity2" table="Entity2">
<composite-id>
<key-many-to-one name="Entity1" class="Entity1" column="id1" />
<key-many-to-one name="Entity3" class="Entity3" column="id3" />
</composite-id>
</class>
<class name="Entity3" table="Entity3">
<id name="Id" type="Guid" column="id">
<generator class="guid" />
</id>
</class>
</hibernate-mapping>