Skip to content

Commit 10393df

Browse files
maca88bahusoid
andauthored
Add support for joining a subquery in hql (#2551)
* Add support for joining a subquery in hql * Enable tests and fix #2092 Co-authored-by: Roman Artiukhin <bahusdrive@gmail.com>
1 parent 8b7952a commit 10393df

Some content is hidden

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

62 files changed

+4060
-499
lines changed
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

+6-1
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

+2
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ public virtual ISet<OrderLine> OrderLines
9090
get { return _orderLines; }
9191
}
9292

93+
public virtual ISet<int> ProductIds { get; set; }
94+
9395
public virtual void AddOrderLine(OrderLine orderLine)
9496
{
9597
if (!_orderLines.Contains(orderLine))
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

+5
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@
6060
<key column="OrderId"/>
6161
<one-to-many class="OrderLine"/>
6262
</set>
63+
64+
<set name="ProductIds" table="OrderLines">
65+
<key column="OrderId" />
66+
<element column="ProductId" type="Int32" />
67+
</set>
6368

6469
</class>
6570

0 commit comments

Comments
 (0)