[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-2898) Incorrect SQL generated when one-to-many foreign key is in a discriminated subclass table
Nicolas De Cubber (JIRA)
noreply at atlassian.com
Fri Oct 19 09:55:38 EDT 2007
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2898?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_28488 ]
Nicolas De Cubber commented on HHH-2898:
----------------------------------------
Affects version 3.2.0.ga
> Incorrect SQL generated when one-to-many foreign key is in a discriminated subclass table
> -----------------------------------------------------------------------------------------
>
> Key: HHH-2898
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2898
> Project: Hibernate3
> Issue Type: Bug
> Components: core, query-hql
> Environment: Hibernate Tools 3.2.0.beta8
> Reporter: Nicolas De Cubber
> Original Estimate: 4 hours
> Remaining Estimate: 4 hours
>
> I have the following mappings describing a hierarchy of events and a class that the events refer to:
> <hibernate-mapping package="com.xyz">
> <class name="Event" table="event">
> <meta attribute="scope-class" inherit="false">public abstract</meta>
> <id name="Id" type="long" column="event_id"/>
> <discriminator column="event_type_id" type="integer" />
> <subclass name="EventPayer" discriminator-value="-3">
> <join table="event_payer">
> <key column="event_id" />
> </join>
> </subclass>
> </class>
> <class name="Payer" table="payer">
> <id name="payerId" column="payer_id" type="java.lang.Long"/>
> <list name="eventPayers" cascade="save-update">
> <key column="payer_id"/>
> <list-index column="LISTINDEX"/>
> <one-to-many class="EventPayer"/>
> </set>
> </class>
> </hibernate-mapping>
> when, in the Hibernate Console, i run the query :
> select 1 from Payer payer inner join payer.eventPayers
> It generates the following sql-code :
> select
> 1 as col_0_0_
> from
> Payer payer0_
> inner join
> Event event1_
> on payer0_.payerId=event1_.payer_id
> inner join
> EventPayer event1_1_
> on event1_.event_id=event1_1_event_id
> Which is incorrect because the table Event do not have the colum payerId.
> The correct query should be like:
> select
> 1 as col_0_0_
> from
> Payer payer0_
> inner join
> EventPayer event1_
> on payer0_.payerId=event1_.payer_id
> inner join
> Event event1_1_
> on event1_.event_id=event1_1_event_id
> I found a 'workaround' but it has performance consequences.
> The workAround is to remove the discriminator and to use <joined-subclass> instead of [<subclass> <join>]
> So if i rewrite the Event mapping like this:
> <class name="Event" table="event">
> <meta attribute="scope-class" inherit="false">public abstract</meta>
> <id name="Id" type="long" column="event_id"/>
> <joined-subclass name="EventPayer" table="event_payer">
> <key column="event_id" />
> </joined-subclass>
> </class>
> the query is generated correctly :
> select
> 1 as col_0_0_
> from
> Payer payer0_
> inner join
> EventPayer event1_
> on payer0_.payerId=event1_.payer_id
> inner join
> Event event1_1_
> on event1_.event_id=event1_1_event_id
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list