So there can only ever be a single one-to-one relation between two
entities? I don't understand.
Best Regards, David
On 1/17/2011 1:55 PM, Fabio Maulo wrote:
the matter is that you does not have a one-to-one relation.
On Thu, Jan 6, 2011 at 9:10 AM, David Schmitt <[email protected]
<mailto:[email protected]>> wrote:
Hi everyone,
I'm having troubles mapping two one-to-one relations and would like to
check whether I'm doing the mapping wrong before filing a bug.
My entities:
public class Parent
{
public virtual int ID { get; set; }
public virtual int ModuleId { get; set; }
public virtual Child A { get; set; }
public virtual Child B { get; set; }
}
public class Child
{
public virtual int ID { get; set; }
public virtual Parent AParent { get; set; }
public virtual Parent BParent { get; set; }
}
My tables:
CREATE TABLE public.child
(
id serial NOT NULL,
CONSTRAINT pk_child PRIMARY KEY (id)
)
CREATE TABLE public.parent
(
id serial NOT NULL,
moduleid integer NOT NULL,
a integer,
b integer,
CONSTRAINT pk_parent PRIMARY KEY (id),
CONSTRAINT fk_a FOREIGN KEY (a)
REFERENCES public.child (id),
CONSTRAINT fk_b FOREIGN KEY (b)
REFERENCES public.child (id)
)
My mapping, according to section 5.1.11. one-to-one, "unique foreign key
associations":
<class name="Parent">
<id name="ID">
<generator class="native"/>
</id>
<property name="ModuleId" />
<many-to-one name="A"
class="Child" />
<many-to-one name="B"
class="Child" />
</class>
<class name="Child">
<id name="ID">
<generator class="native"/>
</id>
<one-to-one name="AParent"
class="Parent"
constrained="false"
property-ref="A" />
<one-to-one name="BParent"
class="Parent"
constrained="false"
property-ref="B" />
</class>
My query:
List<Child> childs = session
.Query<Child>()
.Where(i => (i.AParent != null && i.AParent.ModuleId == 10)
|| (i.BParent != null && i.BParent.ModuleId == 10))
.ToList();
That is, select all Childs whose parent has a ModuleId == 10 or no
parent at all.
The problem now is, that this is translated into wrong SQL:
select child0_.ID as ID1_
from Child child0_, Parent parent1_, Parent parent2_
where
child0_.ID=parent1_.A
and child0_.ID=parent2_.B
and (
(child0_.ID is not null) and parent1_.ModuleId=:p0
or (child0_.ID is not null) and parent2_.ModuleId=:p1);
:p0 = 10 [Type: Int32 (0)], :p1 = 10 [Type: Int32 (0)]
A similar query is created using this HQL:
from Child c
where c.AParent.ModuleId = 10 or c.BParent.ModuleId = 10
Here's the query I'd expect:
select child0_.ID as ID1_
from Child child0_
left join Parent parent1_ on (child0_.ID=parent1_.A)
left join Parent parent2_ on (child0_.ID=parent2_.B)
where
(parent1_.A is not null) and parent1_.ModuleId=10
or (parent2_.B is not null) and parent2_.ModuleId=10
What have I done wrong? Or, is this an NHibernate bug?
Best Regards, David
--
dasz.at <http://dasz.at> OG Tel: +43 (0)664 2602670
Web: http://dasz.at
Klosterneuburg UID: ATU64260999
FB-Nr.: FN 309285 g FB-Gericht: LG Korneuburg
--
You received this message because you are subscribed to the Google
Groups "nhusers" group.
To post to this group, send email to [email protected]
<mailto:[email protected]>.
To unsubscribe from this group, send email to
[email protected]
<mailto:nhusers%[email protected]>.
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.
--
Fabio Maulo
--
You received this message because you are subscribed to the Google
Groups "nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.
--
dasz.at OG Tel: +43 (0)664 2602670 Web: http://dasz.at
Klosterneuburg UID: ATU64260999
FB-Nr.: FN 309285 g FB-Gericht: LG Korneuburg
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.