Skip to content

Commit 8ade292

Browse files
committed
Add support for joining a subquery in hql
1 parent 629ac62 commit 8ade292

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+3731
-461
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using System;
2+
3+
namespace NHibernate.DomainModel.Northwind.Entities
4+
{
5+
public class CompositeOrder : IEquatable<CompositeOrder>
6+
{
7+
public virtual int OrderId { get; set; }
8+
9+
public virtual Customer Customer { get; set; }
10+
11+
public virtual DateTime? OrderDate { get; set; }
12+
13+
public virtual DateTime? RequiredDate { get; set; }
14+
15+
public virtual DateTime? ShippingDate { get; set; }
16+
17+
public virtual Shipper Shipper { get; set; }
18+
19+
public virtual decimal? Freight { get; set; }
20+
21+
public virtual string ShippedTo { get; set; }
22+
23+
public override bool Equals(object obj)
24+
{
25+
if (ReferenceEquals(null, obj)) return false;
26+
if (ReferenceEquals(this, obj)) return true;
27+
if (obj.GetType() != GetType()) return false;
28+
return Equals((CompositeOrder) obj);
29+
}
30+
31+
public virtual bool Equals(CompositeOrder other)
32+
{
33+
if (ReferenceEquals(null, other)) return false;
34+
if (ReferenceEquals(this, other)) return true;
35+
return OrderId == other.OrderId && Equals(Customer, other.Customer);
36+
}
37+
38+
public override int GetHashCode()
39+
{
40+
unchecked
41+
{
42+
return (OrderId * 397) ^ (Customer != null ? Customer.GetHashCode() : 0);
43+
}
44+
}
45+
}
46+
}

src/NHibernate.DomainModel/Northwind/Entities/Northwind.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,12 @@ public IQueryable<Order> Orders
3333
{
3434
get { return _session.Query<Order>(); }
3535
}
36-
36+
37+
public IQueryable<CompositeOrder> CompositeOrders
38+
{
39+
get { return _session.Query<CompositeOrder>(); }
40+
}
41+
3742
public IQueryable<OrderLine> OrderLines
3843
{
3944
get { return _session.Query<OrderLine>(); }

src/NHibernate.DomainModel/Northwind/Entities/Order.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ public virtual ISet<OrderLine> OrderLines
8888
get { return _orderLines; }
8989
}
9090

91+
public virtual ISet<int> ProductIds { get; set; }
92+
9193
public virtual void AddOrderLine(OrderLine orderLine)
9294
{
9395
if (!_orderLines.Contains(orderLine))
@@ -106,4 +108,4 @@ public virtual void RemoveOrderLine(OrderLine orderLine)
106108
}
107109
}
108110
}
109-
}
111+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="NHibernate.DomainModel.Northwind.Entities" assembly="NHibernate.DomainModel">
3+
<class name="CompositeOrder" mutable="false" schema-action="none">
4+
<subselect>
5+
select * from Orders
6+
</subselect>
7+
8+
<composite-id unsaved-value="any">
9+
<key-property name="OrderId" column="OrderId" />
10+
<key-many-to-one name="Customer" column="CustomerId" />
11+
</composite-id>
12+
13+
<property name="OrderDate" column="OrderDate" />
14+
<property name="RequiredDate" column="RequiredDate" />
15+
<property name="ShippingDate" column="ShippedDate" />
16+
<many-to-one name="Shipper" column="ShipVia" fetch="select"/>
17+
<property name="Freight" column="Freight" />
18+
<property name="ShippedTo" column="ShipName" type="string" length="40" />
19+
20+
</class>
21+
</hibernate-mapping>

src/NHibernate.DomainModel/Northwind/Mappings/Order.hbm.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,12 @@
5757
<key column="OrderId"/>
5858
<one-to-many class="OrderLine"/>
5959
</set>
60+
61+
<set name="ProductIds" table="OrderLines">
62+
<key column="OrderId" />
63+
<element column="ProductId" type="Int32" />
64+
</set>
6065

6166
</class>
6267

63-
</hibernate-mapping>
68+
</hibernate-mapping>

0 commit comments

Comments
 (0)