Skip to content

Commit c68f07a

Browse files
committed
Test case
1 parent 19d4549 commit c68f07a

File tree

3 files changed

+104
-0
lines changed

3 files changed

+104
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System.Collections.Generic;
2+
3+
namespace NHibernate.Test.NHSpecificTest.GH3288
4+
{
5+
class TopEntity
6+
{
7+
public virtual int Id { get; set; }
8+
public virtual MiddleEntity MiddleEntity { get; set; }
9+
}
10+
class MiddleEntity
11+
{
12+
public virtual int Id { get; set; }
13+
public virtual ISet<Component> Components { get; set; } = new HashSet<Component>();
14+
}
15+
16+
class Component
17+
{
18+
public virtual MiddleEntity MiddleEntity { get; set; }
19+
public virtual int Value { get; set; }
20+
21+
public override bool Equals(object obj)
22+
{
23+
return (obj as Component)?.MiddleEntity.Id == MiddleEntity.Id;
24+
}
25+
26+
public override int GetHashCode()
27+
{
28+
return MiddleEntity.Id.GetHashCode();
29+
}
30+
}
31+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using System.Linq;
2+
using NHibernate.Linq;
3+
using NUnit.Framework;
4+
5+
namespace NHibernate.Test.NHSpecificTest.GH3288
6+
{
7+
[TestFixture]
8+
public class FetchAndCollectionJoinFixture : BugTestCase
9+
{
10+
protected override void OnSetUp()
11+
{
12+
using var session = OpenSession();
13+
using var transaction = session.BeginTransaction();
14+
var middleEntity = new MiddleEntity();
15+
middleEntity.Components.Add(new Component { MiddleEntity = middleEntity, Value = 1 });
16+
var te = new TopEntity
17+
{
18+
MiddleEntity = middleEntity
19+
};
20+
session.Save(middleEntity);
21+
session.Save(te);
22+
23+
transaction.Commit();
24+
}
25+
26+
protected override void OnTearDown()
27+
{
28+
using var session = OpenSession();
29+
using var transaction = session.BeginTransaction();
30+
session.Delete("from System.Object");
31+
32+
transaction.Commit();
33+
}
34+
35+
[Test]
36+
public void ReuseEntityJoinWithCollectionJoin()
37+
{
38+
using var session = OpenSession();
39+
40+
var entities = session.Query<TopEntity>()
41+
.Fetch(e => e.MiddleEntity)
42+
.Where(e => e.MiddleEntity.Components.Any(e => e.Value != 0))
43+
.ToList();
44+
Assert.That(entities.Count, Is.EqualTo(1));
45+
}
46+
}
47+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
2+
namespace="NHibernate.Test.NHSpecificTest.GH3288"
3+
assembly="NHibernate.Test">
4+
<class name="TopEntity" table="`TopEntity`">
5+
<id name="Id" >
6+
<generator class="identity" />
7+
</id>
8+
<many-to-one class="MiddleEntity" name="MiddleEntity">
9+
<column name="MiddleEntity_id" />
10+
</many-to-one>
11+
</class>
12+
<class name="MiddleEntity" table="`MiddleEntity`">
13+
<id name="Id" >
14+
<generator class="identity" />
15+
</id>
16+
<set cascade="all" name="Components" table="BottomEntity">
17+
<key not-null="true">
18+
<column name="MiddleEntity_id" />
19+
</key>
20+
<composite-element class="Component">
21+
<parent name="MiddleEntity" />
22+
<property name="Value" />
23+
</composite-element>
24+
</set>
25+
</class>
26+
</hibernate-mapping>

0 commit comments

Comments
 (0)