From: <hib...@li...> - 2006-03-07 17:35:05
|
Author: epbernard Date: 2006-03-07 12:34:26 -0500 (Tue, 07 Mar 2006) New Revision: 9568 Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Tower.java Log: ANN-274 Pretty bad solution though Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java 2006-03-07 15:06:09 UTC (rev 9567) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java 2006-03-07 17:34:26 UTC (rev 9568) @@ -1,6 +1,9 @@ //$Id$ package org.hibernate.cfg; +import javax.persistence.Column; +import javax.persistence.JoinColumn; + import org.hibernate.AnnotationException; import org.hibernate.mapping.Component; import org.hibernate.mapping.KeyValue; @@ -71,4 +74,39 @@ public boolean isComponent() { return true; } + + @Override + public Column[] getOverriddenColumn(String propertyName) { + //FIXME this is yukky + Column[] result = super.getOverriddenColumn( propertyName ); + if (result == null) { + String userPropertyName = extractUserPropertyName( "id", propertyName ); + if (userPropertyName != null) result = super.getOverriddenColumn( userPropertyName ); + } + if (result == null) { + String userPropertyName = extractUserPropertyName( "_identifierMapper", propertyName ); + if (userPropertyName != null) result = super.getOverriddenColumn( userPropertyName ); + } + return result; + } + + private String extractUserPropertyName(String redundantString, String propertyName) { + String result = null; + String className = component.getOwner().getClassName(); + if ( propertyName.startsWith( className ) + && propertyName.length() > className.length() + 2 + redundantString.length() // .id. + && propertyName.substring( + className.length() + 1, className.length() + 1 + redundantString.length() + ).equals( redundantString ) + ) { + //remove id we might be in a @IdCLass case + result = className + propertyName.substring( className.length() + 1 + redundantString.length() ); + } + return result; + } + + @Override + public JoinColumn[] getOverriddenJoinColumn(String propertyName) { + return super.getOverriddenJoinColumn( propertyName ); + } } Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Tower.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Tower.java 2006-03-07 15:06:09 UTC (rev 9567) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/id/Tower.java 2006-03-07 17:34:26 UTC (rev 9568) @@ -2,10 +2,13 @@ package org.hibernate.test.annotations.id; import javax.persistence.Entity; +import javax.persistence.AttributeOverride; +import javax.persistence.Column; /** * @author Emmanuel Bernard */ @Entity +@AttributeOverride(name="longitude", column = @Column(name="fld_longitude")) public class Tower extends MilitaryBuilding { } |