Thanks, please submit this to JIRA.
Laporte Yan wrote:
This is my first contribution to this list, so please forgive me for
my newbie manners
Apparently doing a named sql query using two or more aliases referring
to the same class doesn't work as expected.
In other words, doing something like this:
<sql-query name="myExample Query">
<return alias="a" class="my.class.A"/>
<return alias="other_a" class="my.class.A"/>
<![CDATA[
SELECT {a.*}, {other_a.*}
FROM MY_TABLE as a, MY_OTHER_TABLE as other_a
WHERE .......
]]>
</sql-query>
gives an error like this one:
net.sf.hibernate.QueryException: Alias [other_a] does not correspond
to return alias a [ ....goes on with query....
Of course my specific case is much more complex than this simple example.
Here is what I have found and my proposal for a solution to this
annoyance....
It all happens in net.sf.hibernate.loader.SQLLoader on line 144 (I am
running version 2.1.3 of hibernate, it looks the same in 2.1.6 but at
line 148)
The exception happens because, while persisters for the <return/>s are
stored is a HashMap (alias2Persister) using the alias as a key and
therefore the correct persister is obtained on line 130 (same in
2.6.1) by doing SQLLoadable currentPersister =
getPersisterByResultAlias(aliasName); which actually fetches the
persister from the alias2Persister HashMap
, because the aliases, persisters and suffixes are stored in arrays
with corresponding indexes, the program then goes on to retrieve the
index by looking for the persister retrieved from line 130 in the
persisters array (line 136 (line 140 in 2.1.6): *int*
currentPersisterIndex = getPersisterIndex(currentPersister); ), since
more than one <return> entry exists for a same class, the same
persister is found more than once in the persisters array, returning
the wrong id for aliases and suffixes. The index is only used for
validation (causing the exception) and for retrieving the suffixes.
I believe it is possible to prevent this problem by retrieving the
index from searching the aliases instead of the persisters. It
requires changing line 136(line 140 in 2.1.6) (likely making the
getPersisterIndex() unused) and ideally renaming the variable
currentPersisterIndex to something like currentAliasIndex.
Any chance seeing this validated and fixed?
Thanks in advance...
*Yan Laporte*
Service Architecture, Loto-Québec
987-2057 #5084 (au 1801 MGill college)
[EMAIL PROTECTED]
-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=5047&alloc_id=10808&op=click
_______________________________________________
hibernate-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/hibernate-devel