Skip to content

Commit 80235df

Browse files
committed
NH-2029 - Apply use-many-to-one=false for property-ref one-to-one and many-to-one
1 parent 210ab69 commit 80235df

File tree

2 files changed

+140
-115
lines changed

2 files changed

+140
-115
lines changed

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

Lines changed: 139 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -7,215 +7,240 @@ namespace NHibernate.Test.NHSpecificTest.ManyToOneFilters20Behaviour
77
[TestFixture]
88
public class Fixture : BugTestCase
99
{
10-
private static IList<Parent> joinGraphUsingHql(ISession s)
10+
private static IList<Parent> JoinGraphUsingHql(ISession s)
1111
{
1212
const string hql = @"select p from Parent p
13-
join p.Child c";
13+
join p.Child c";
1414
return s.CreateQuery(hql).List<Parent>();
1515
}
1616

17-
private static IList<Parent> joinGraphUsingCriteria(ISession s)
17+
private static IList<Parent> JoinGraphUsingCriteria(ISession s)
1818
{
1919
return s.CreateCriteria(typeof(Parent)).SetFetchMode("Child", FetchMode.Join).List<Parent>();
2020
}
2121

22-
private static Parent createParent()
22+
private static Parent CreateParent()
2323
{
2424
var ret = new Parent { Child = new Child() };
2525
ret.Address = new Address { Parent = ret };
2626
return ret;
2727
}
2828

29-
private static void enableFilters(ISession s)
29+
private static void EnableFilters(ISession s)
3030
{
31-
IFilter f = s.EnableFilter("activeChild");
31+
var f = s.EnableFilter("activeChild");
3232
f.SetParameter("active", true);
33-
IFilter f2 = s.EnableFilter("alwaysValid");
33+
var f2 = s.EnableFilter("alwaysValid");
3434
f2.SetParameter("always", true);
3535
}
3636

3737
protected override void OnTearDown()
3838
{
39-
using (ISession s = OpenSession())
39+
using (var s = OpenSession())
40+
using (var tx = s.BeginTransaction())
4041
{
41-
using (ITransaction tx = s.BeginTransaction())
42-
{
43-
s.Delete("from Parent");
44-
tx.Commit();
45-
}
42+
s.Delete("from Parent");
43+
tx.Commit();
4644
}
4745
}
4846

4947
[Test]
5048
public void VerifyAlwaysFilter()
5149
{
52-
using (ISession s = OpenSession())
50+
using (var s = OpenSession())
51+
using (var tx = s.BeginTransaction())
5352
{
54-
using (ITransaction tx = s.BeginTransaction())
55-
{
56-
Parent p = createParent();
57-
p.Child.Always = false;
58-
s.Save(p);
59-
tx.Commit();
60-
}
53+
var p = CreateParent();
54+
p.Child.Always = false;
55+
s.Save(p);
56+
tx.Commit();
6157
}
6258

63-
using (ISession s = OpenSession())
59+
using (var s = OpenSession())
6460
{
65-
enableFilters(s);
66-
IList<Parent> resCriteria = joinGraphUsingCriteria(s);
67-
IList<Parent> resHql = joinGraphUsingHql(s);
61+
EnableFilters(s);
62+
var resCriteria = JoinGraphUsingCriteria(s);
63+
var resHql = JoinGraphUsingHql(s);
6864

69-
Assert.AreEqual(0, resCriteria.Count);
70-
Assert.AreEqual(0, resHql.Count);
65+
Assert.That(resCriteria.Count, Is.EqualTo(0));
66+
Assert.That(resHql.Count, Is.EqualTo(0));
7167
}
7268
}
7369

7470
[Test]
7571
public void VerifyFilterActiveButNotUsedInManyToOne()
7672
{
77-
using (ISession s = OpenSession())
73+
using (var s = OpenSession())
74+
using (var tx = s.BeginTransaction())
7875
{
79-
using (ITransaction tx = s.BeginTransaction())
80-
{
81-
s.Save(createParent());
82-
tx.Commit();
83-
}
76+
s.Save(CreateParent());
77+
tx.Commit();
8478
}
8579

86-
using (ISession s = OpenSession())
80+
using (var s = OpenSession())
8781
{
88-
enableFilters(s);
89-
IList<Parent> resCriteria = joinGraphUsingCriteria(s);
90-
IList<Parent> resHql = joinGraphUsingHql(s);
82+
EnableFilters(s);
83+
var resCriteria = JoinGraphUsingCriteria(s);
84+
var resHql = JoinGraphUsingHql(s);
9185

92-
Assert.AreEqual(1, resCriteria.Count);
93-
Assert.IsNotNull(resCriteria[0].Child);
86+
Assert.That(resCriteria.Count, Is.EqualTo(1));
87+
Assert.That(resCriteria[0].Child, Is.Not.Null);
9488

95-
Assert.AreEqual(1, resHql.Count);
96-
Assert.IsNotNull(resHql[0].Child);
89+
Assert.That(resHql.Count, Is.EqualTo(1));
90+
Assert.That(resHql[0].Child, Is.Not.Null);
9791
}
9892
}
9993

10094
[Test]
10195
public void VerifyQueryWithWhereClause()
10296
{
103-
using (ISession s = OpenSession())
97+
using (var s = OpenSession())
98+
using (var tx = s.BeginTransaction())
10499
{
105-
using (ITransaction tx = s.BeginTransaction())
106-
{
107-
var p = createParent();
108-
p.ParentString = "a";
109-
p.Child.ChildString = "b";
110-
s.Save(p);
111-
tx.Commit();
112-
}
100+
var p = CreateParent();
101+
p.ParentString = "a";
102+
p.Child.ChildString = "b";
103+
s.Save(p);
104+
tx.Commit();
113105
}
114106
IList<Parent> resCriteria;
115107
IList<Parent> resHql;
116-
using (ISession s = OpenSession())
108+
using (var s = OpenSession())
117109
{
118-
enableFilters(s);
110+
EnableFilters(s);
119111
resCriteria = s.CreateCriteria(typeof(Parent), "p")
120-
.CreateCriteria("Child", "c")
121-
.SetFetchMode("Child", FetchMode.Join)
122-
.Add(Restrictions.Eq("p.ParentString", "a"))
123-
.Add(Restrictions.Eq("c.ChildString", "b"))
124-
.List<Parent>();
125-
resHql = s.CreateQuery(@"select p from Parent p
126-
join fetch p.Child c
127-
where p.ParentString='a' and c.ChildString='b'").List<Parent>();
112+
.CreateCriteria("Child", "c")
113+
.SetFetchMode("Child", FetchMode.Join)
114+
.Add(Restrictions.Eq("p.ParentString", "a"))
115+
.Add(Restrictions.Eq("c.ChildString", "b"))
116+
.List<Parent>();
117+
118+
resHql = s.CreateQuery(
119+
@"select p from Parent p
120+
join fetch p.Child c
121+
where p.ParentString='a' and c.ChildString='b'")
122+
.List<Parent>();
128123
}
129-
Assert.AreEqual(1, resCriteria.Count);
130-
Assert.IsNotNull(resCriteria[0].Child);
131-
Assert.AreEqual(1, resHql.Count);
132-
Assert.IsNotNull(resHql[0].Child);
124+
Assert.That(resCriteria.Count, Is.EqualTo(1));
125+
Assert.That(resCriteria[0].Child, Is.Not.Null);
126+
127+
Assert.That(resHql.Count, Is.EqualTo(1));
128+
Assert.That(resHql[0].Child, Is.Not.Null);
133129
}
134130

135131
[Test]
136132
public void VerifyAlwaysFiltersOnPropertyRef()
137133
{
138-
using (ISession s = OpenSession())
134+
using (var s = OpenSession())
135+
using (var tx = s.BeginTransaction())
139136
{
140-
using (ITransaction tx = s.BeginTransaction())
141-
{
142-
Parent p = createParent();
143-
s.Save(p);
144-
tx.Commit();
145-
}
137+
var p = CreateParent();
138+
s.Save(p);
139+
tx.Commit();
146140
}
147141

148-
using (ISession s = OpenSession())
142+
using (var s = OpenSession())
149143
{
150-
enableFilters(s);
151-
IList<Parent> resCriteria = joinGraphUsingCriteria(s);
152-
IList<Parent> resHql = joinGraphUsingHql(s);
153-
154-
Assert.IsNotNull(resCriteria[0].Address);
155-
Assert.IsNotNull(resHql[0].Address);
144+
EnableFilters(s);
145+
var resCriteria = JoinGraphUsingCriteria(s);
146+
var resHql = JoinGraphUsingHql(s);
147+
148+
Assert.That(resCriteria.Count, Is.EqualTo(1));
149+
Assert.That(resCriteria[0].Address, Is.Not.Null);
150+
Assert.That(resHql.Count, Is.EqualTo(1));
151+
Assert.That(resHql[0].Address, Is.Not.Null);
156152
}
157153
}
158154

159155
[Test]
160156
public void ExplicitFiltersOnCollectionsShouldBeActive()
161157
{
162-
using (ISession s = OpenSession())
158+
using (var s = OpenSession())
159+
using (var tx = s.BeginTransaction())
163160
{
164-
using (ITransaction tx = s.BeginTransaction())
161+
var p = CreateParent();
162+
p.Children = new List<Child>
165163
{
166-
Parent p = createParent();
167-
p.Children = new List<Child>
168-
{
169-
new Child {IsActive = true},
170-
new Child {IsActive = false},
171-
new Child {IsActive = true}
172-
};
173-
s.Save(p);
174-
tx.Commit();
175-
}
164+
new Child {IsActive = true},
165+
new Child {IsActive = false},
166+
new Child {IsActive = true}
167+
};
168+
s.Save(p);
169+
tx.Commit();
176170
}
177171

178-
using (ISession s = OpenSession())
172+
using (var s = OpenSession())
179173
{
180-
IFilter f = s.EnableFilter("active");
174+
var f = s.EnableFilter("active");
181175
f.SetParameter("active", true);
182-
IList<Parent> resCriteria = joinGraphUsingCriteria(s);
183-
IList<Parent> resHql = joinGraphUsingHql(s);
176+
var resCriteria = JoinGraphUsingCriteria(s);
177+
var resHql = JoinGraphUsingHql(s);
184178

185-
Assert.AreEqual(2, resCriteria[0].Children.Count);
186-
Assert.AreEqual(2, resHql[0].Children.Count);
179+
Assert.That(resCriteria.Count, Is.EqualTo(1));
180+
Assert.That(resCriteria[0].Children.Count, Is.EqualTo(2));
181+
Assert.That(resHql.Count, Is.EqualTo(1));
182+
Assert.That(resHql[0].Children.Count, Is.EqualTo(2));
187183
}
188184
}
189185

190186
[Test]
191187
public void ExplicitFiltersOnCollectionsShouldBeActiveWithEagerLoad()
192188
{
193-
using (ISession s = OpenSession())
189+
using (var s = OpenSession())
190+
using (var tx = s.BeginTransaction())
194191
{
195-
using (ITransaction tx = s.BeginTransaction())
192+
var p = CreateParent();
193+
p.Children = new List<Child>
196194
{
197-
Parent p = createParent();
198-
p.Children = new List<Child>
199-
{
200-
new Child {IsActive = true},
201-
new Child {IsActive = false},
202-
new Child {IsActive = true}
203-
};
204-
s.Save(p);
205-
tx.Commit();
206-
}
195+
new Child {IsActive = true},
196+
new Child {IsActive = false},
197+
new Child {IsActive = true}
198+
};
199+
s.Save(p);
200+
tx.Commit();
207201
}
208202

209-
using (ISession s = OpenSession())
203+
using (var s = OpenSession())
210204
{
211-
IFilter f = s.EnableFilter("active");
205+
var f = s.EnableFilter("active");
212206
f.SetParameter("active", true);
213-
IList<Parent> resCriteria = s.CreateCriteria(typeof(Parent)).SetFetchMode("Children", FetchMode.Join).List<Parent>();
214-
IList<Parent> resHql = s.CreateQuery("select p from Parent p join fetch p.Children").List<Parent>();
207+
var resCriteria = s.CreateCriteria(typeof(Parent)).SetFetchMode("Children", FetchMode.Join).List<Parent>();
208+
var resHql = s.CreateQuery("select p from Parent p join fetch p.Children").List<Parent>();
209+
210+
Assert.That(resCriteria[0].Children.Count, Is.EqualTo(2));
211+
Assert.That(resHql[0].Children.Count, Is.EqualTo(2));
212+
}
213+
}
215214

216-
Assert.AreEqual(2, resCriteria[0].Children.Count);
217-
Assert.AreEqual(2, resHql[0].Children.Count);
215+
[Test]
216+
public void Verify20BehaviourForPropertyRefAndFilter()
217+
{
218+
using (var s = OpenSession())
219+
using (var tx = s.BeginTransaction())
220+
{
221+
s.Save(CreateParent());
222+
tx.Commit();
223+
}
224+
using (var s = OpenSession())
225+
using (s.BeginTransaction())
226+
{
227+
s.EnableFilter("active")
228+
.SetParameter("active", true);
229+
230+
var resCriteria = s.CreateCriteria(typeof(Parent))
231+
.SetFetchMode("Address", FetchMode.Join)
232+
.List<Parent>();
233+
234+
var resHql = s.CreateQuery("select p from Parent p join p.Address")
235+
.List<Parent>();
236+
237+
Assert.That(resCriteria.Count, Is.EqualTo(1));
238+
Assert.That(resCriteria[0].Address, Is.Not.Null);
239+
240+
Assert.That(resHql.Count, Is.EqualTo(1));
241+
Assert.That(resHql[0].Address, Is.Not.Null);
218242
}
219243
}
244+
220245
}
221246
}

src/NHibernate/Type/EntityType.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ public string GetOnCondition(string alias, ISessionFactoryImplementor factory, I
484484
}
485485
else
486486
{
487-
return GetAssociatedJoinable(factory).FilterFragment(alias, enabledFilters);
487+
return GetAssociatedJoinable(factory).FilterFragment(alias, FilterHelper.GetEnabledForManyToOne(enabledFilters));
488488
}
489489
}
490490

0 commit comments

Comments
 (0)