Skip to content

Commit 02c8e19

Browse files
committed
Fix fetching many-to-many with subclasses
Test case
1 parent fe7b6f0 commit 02c8e19

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

src/NHibernate.Test/NHSpecificTest/NH2174/Entity.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public override int GetHashCode()
8686
private int _id_Doc;
8787
private int _id_base;
8888
public virtual IList<DocumentDetailDocument> RefferedDetails { get; set; } = new List<DocumentDetailDocument>();
89+
public virtual IList<DocumentDetailDocument> RefferedDetailsManyToMany { get; set; } = new List<DocumentDetailDocument>();
8990

9091
public int Id_Doc
9192
{

src/NHibernate.Test/NHSpecificTest/NH2174/Fixture.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ protected override void OnSetUp()
1414
{
1515
var doc = new Document {Id_Base = 1, Id_Doc = 2};
1616
session.Save(doc);
17-
session.Save(new DocumentDetailDocument {Id_Base = 1, Id_Doc = 2, Id_Item = 1, ReferencedDocument = doc});
17+
var detail = new DocumentDetailDocument {Id_Base = 1, Id_Doc = 2, Id_Item = 1, ReferencedDocument = doc};
18+
session.Save(detail);
1819

20+
doc.RefferedDetailsManyToMany.Add(detail);
1921
transaction.Commit();
2022
}
2123
}
@@ -42,6 +44,18 @@ public void LinqFetch()
4244
}
4345
}
4446

47+
[Test(Description = "GH-3239")]
48+
public void LinqFetchManyToMany()
49+
{
50+
using (var session = OpenSession())
51+
{
52+
var result = (from e in session.Query<Document>().Fetch(x => x.RefferedDetailsManyToMany)
53+
select e).FirstOrDefault();
54+
55+
Assert.That(result.RefferedDetailsManyToMany, Has.Count.EqualTo(1));
56+
}
57+
}
58+
4559
[Test]
4660
public void QueryOverFetch()
4761
{
@@ -52,6 +66,16 @@ public void QueryOverFetch()
5266
}
5367
}
5468

69+
[Test(Description = "GH-3239")]
70+
public void QueryOverFetchManyToMany()
71+
{
72+
using (var session = OpenSession())
73+
{
74+
var result = session.QueryOver<Document>().Fetch(SelectMode.Fetch, x => x.RefferedDetailsManyToMany).SingleOrDefault();
75+
Assert.That(result.RefferedDetailsManyToMany, Has.Count.EqualTo(1));
76+
}
77+
}
78+
5579
[Test]
5680
public void LazyLoad()
5781
{

src/NHibernate.Test/NHSpecificTest/NH2174/Mappings.hbm.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,18 @@
4242
</key>
4343
<one-to-many class="DocumentDetailDocument" />
4444
</bag>
45+
46+
<bag name="RefferedDetailsManyToMany" lazy="true" generic="true" cascade="all">
47+
<key>
48+
<column name="id_Doc_detail" />
49+
<column name="id_base_detail" />
50+
</key>
51+
<many-to-many class="DocumentDetailDocument" >
52+
<column name="id_item" />
53+
<column name="Version" />
54+
<column name="id_Doc" />
55+
<column name="id_base" />
56+
</many-to-many>
57+
</bag>
4558
</class>
4659
</hibernate-mapping>

0 commit comments

Comments
 (0)