|
From: NHibernate J. <mik...@us...> - 2006-10-23 13:43:36
|
Avoid joins on <composite-key><key-many-to-one> queries
-------------------------------------------------------
Key: NH-766
URL: http://jira.nhibernate.org/browse/NH-766
Project: NHibernate
Type: Improvement
Components: Core
Versions: 1.0.2
Reporter: Kirk Wylie
Priority: Trivial
This is being promoted from something I posted on the NHibernate forums.
Using NHibernate 1.0.2.0 against Oracle 9.
I'm working with an existing schema which isn't using surrogate keys, and I have a composite key of the form:
<class name="CalculatedRating" ...>
<composite-id>
<key-property name="EffectiveDate" column="EFFECTIVE_DATE"/>
<key-many-to-one name="FdeOrganization" column="ORGANIZATION_ID" .../>
</composite-id>
...
</class>
Using this query:
from CalculatedRating cr
inner join fetch cr.FdeOrganization fdeOrg
left join fetch fdeOrg.Attributes as attribute
inner join fetch attribute.AttributeType
where cr.EffectiveDate =
(select max(cr2.EffectiveDate)
from CalculatedRating cr2
where cr2.EffectiveDate >= :EffectiveDate)
order by cr.FdeOrganization.OrgId
NHibernate is quite correctly generating the SQL necessary to completely manifest the CalculatedRating element in a single query. However, after executing that query, it then still proceeds to do the N+1 select on FdeOrganization.
As in this application I'm actually using quite a few cases where I'm successfully using the inner join fetch technique against FdeOrganization, I can only assume that this is a problem related to key-many-to-one rather than many-to-one.
After further investigation, I can establish that Hibernate 3.1.3 exposes the exact same functionality. I'm filing this first against NHibernate since that's where I first discovered it, however, since it affects Hibernate as well it might be better filed against that, and I can do so if needed.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.nhibernate.org/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
|