@@ -21,7 +21,7 @@ protected override string[] Mappings
21
21
return new string [ ]
22
22
{
23
23
"CompositeId.Customer.hbm.xml" , "CompositeId.Order.hbm.xml" , "CompositeId.LineItem.hbm.xml" ,
24
- "CompositeId.Product.hbm.xml"
24
+ "CompositeId.Product.hbm.xml" , "CompositeId.Shipper.hbm.xml"
25
25
} ;
26
26
}
27
27
}
@@ -64,9 +64,13 @@ public void CompositeIds()
64
64
65
65
Order o = new Order ( c ) ;
66
66
o . OrderDate = DateTime . Today ;
67
+ o . Shipper = new Shipper ( ) { Id = new NullableId ( null , 13 ) } ;
68
+ s . Persist ( o ) ;
69
+
67
70
LineItem li = new LineItem ( o , p ) ;
68
71
li . Quantity = 2 ;
69
-
72
+ s . Persist ( li ) ;
73
+
70
74
t . Commit ( ) ;
71
75
}
72
76
@@ -123,6 +127,19 @@ public void CompositeIds()
123
127
t . Commit ( ) ;
124
128
}
125
129
130
+ using ( s = OpenSession ( ) )
131
+ {
132
+ t = s . BeginTransaction ( ) ;
133
+ var noShippersForWarehouse = s . Query < Order > ( )
134
+ // NOTE: .Where(x => x.Shipper.Id == new NullableId(null, 13)) improperly renders
135
+ // "where (ShipperId = @p1 and WarehouseId = @p2)" with @p1 = NULL (needs to be is null)
136
+ // But the effort to fix is pretty high due to how component tuples are managed in linq / hql.
137
+ . Where ( x => x . Shipper . Id . WarehouseId == 13 && x . Shipper . Id . Id == null )
138
+ . ToList ( ) ;
139
+ Assert . AreEqual ( 1 , noShippersForWarehouse . Count ) ;
140
+ t . Commit ( ) ;
141
+ }
142
+
126
143
using ( s = OpenSession ( ) )
127
144
{
128
145
t = s . BeginTransaction ( ) ;
@@ -291,5 +308,14 @@ public void AnyOnCompositeId()
291
308
s . Query < Order > ( ) . Select ( o => o . LineItems . Any ( ) ) . ToList ( ) ;
292
309
}
293
310
}
311
+
312
+ public void NullCompositeId ( )
313
+ {
314
+ using ( var s = OpenSession ( ) )
315
+ {
316
+ s . Query < Order > ( ) . Where ( o => o . LineItems . Any ( ) ) . ToList ( ) ;
317
+ s . Query < Order > ( ) . Select ( o => o . LineItems . Any ( ) ) . ToList ( ) ;
318
+ }
319
+ }
294
320
}
295
321
}
0 commit comments