[hibernate-issues] [Hibernate-JIRA] Created: (HHH-6157) Column under a duplicate alias in union-subclass filtered from select statement

Diego del Río (JIRA) noreply at atlassian.com
Sun Apr 24 12:01:01 EDT 2011


Column under a duplicate alias in union-subclass filtered from select statement
-------------------------------------------------------------------------------

                 Key: HHH-6157
                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6157
             Project: Hibernate Core
          Issue Type: Bug
          Components: core
    Affects Versions: 3.6.1
         Environment: Hibernate Core 3.6.1.Final
Database ->
       name : HSQL Database Engine
    version : 1.8.0
      major : 1
      minor : 8
Driver ->
       name : HSQL Database Engine Driver
    version : 1.8.0
      major : 1
      minor : 8

            Reporter: Diego del Río
         Attachments: test_case.zip

I think there is a bug in the process of column alias generation.
Given this mapping
{code:xml}
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.headlesspigs.domainmodel">
	<class name="Invoice" abstract="true">
		<id name="id" column="ID" type="long" unsaved-value="0">
			<generator class="hilo" />
		</id>
		<property name="name" type="string" column="DS_NAME" />
		<union-subclass name="SpecificInvoice" table="TEST_SPECIFIC">
			<!-- "sameNameAsInvoice" is intentionally mapped to the same column as 
				the inherited property "name" is -->
			<property name="sameNameAsInvoice" type="string" column="DS_NAME"
				insert="false" update="false" />
			<property name="number" column="DS_NUMBER" type="string" />
			<property name="code" column="DS_CODE" type="string" />
		</union-subclass>
	</class>
</hibernate-mapping>
{code}
During the process of alias generation, the column {{DS_CODE}} gets the same alias as the column {{DS_NAME}} from {{SpecificInvoice}}. Later on, when the  {{UnionSubclassEntityPersister}} builds the _select_ part of the SQL statement  in the method {{propertySelectFragment()}}, {{DS_CODE}} is filtered out from the select string in the method {{SelectFragment.toFragmentString()}}.
When the entity is being loaded, the entity loader uses the wrong alias for the {{DS_CODE}} column and instead obtains the value of the column {{DS_NAME}}, leading to an {{SpecificInvoice}} instance with the wrong value for the property _code_. If, instead, the property _code_ had a different type, e.g. {{many-to-one}}, that would potentially lead to an {{ObjectNotFoundException}}, because the identifier used to load the associated entity would be wrong.
A test case (along with the mapping file and domain classes) is attached, that shows the entity {{SpecificInvoice}} being loaded with its property _code_ with the wrong value.

-- 
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