Allow overridden column names with "table per concrete class" inheritance
-------------------------------------------------------------------------
Key: HHH-5637
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-5637
Project: Hibernate Core
Issue Type: Improvement
Components: core
Affects Versions: 3.5.6
Reporter: Mark A. Ziesemer
Per
http://docs.jboss.org/hibernate/stable/core/reference/en/html/inheritance...
for "Table per concrete class":
{quote}
The limitation of this approach is that if a property is mapped on the superclass, the
column name must be the same on all subclass tables.
{quote}
At one point, this documentation also mentioned
([
source|http://viewvc.jboss.org/cgi-bin/viewvc.cgi/hibernate/core/trunk/do...]):
{quote}
(We might relax this in a future release of Hibernate.)
{quote}
I've not found a related task for this, so I'm creating this task as a request to
support this.
For one use case, I have several related tables that would work very well with polymorphic
queries. They have many related columns, but with slightly different column names, e.g.
"{{header_id}}" vs. "{{item_header_id}}" (this is arguably poor DB
schema design, but is a 3rd party DB that we can't modify). I'm currently able to
work with it by using the "implicit polymorphism" alternative. In some cases,
I'm using {{@AttributeOverride}}, and in other cases the properties are defined in the
parent abstract class as {{@Transient}}, and then overridden in the child concrete classes
with the appropriate {{@Column}} annotated per-class.
Unfortunately, without using {{TABLE_PER_CLASS}}, SQL unions are not used. This
negatively impacts database performance, and doesn't allow for DB-side ordering and
setting a maximum # of results.
When attempting {{TABLE_PER_CLASS}}, Hibernate already generates SQL similar to the
following:
{code:SQL}
Select entityId_, field1_, field2_ From (
Select entityId As entityId_, field1 As field1_, field2 As field2_ From table1
Union Select entityId As entityId_, field1 As field1_, field2 As field2_ From table2
);
{code}
Hibernate should allow {{@AttributeOverride}}'s or {{@Column}} annotations on the
subclasses to override the column names per table. For example:
{code:SQL}
Select entityId_, field1_, field2_ From (
Select header_id As entityId_, field1 As field1_, field2 As field2_ From table1
Union Select item_header_id As entityId_, field1 As field1_, field2 As field2_ From
table2
);
{code}
--
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....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira