[hibernate-issues] [Hibernate-JIRA] Updated: (HHH-7242) referenced attributes (property-ref) need to be resolved into relational Value references
Steve Ebersole (JIRA)
noreply at atlassian.com
Thu Apr 12 13:21:48 EDT 2012
[ https://hibernate.onjira.com/browse/HHH-7242?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Steve Ebersole updated HHH-7242:
--------------------------------
Assignee: Steve Ebersole (was: Hardy Ferentschik)
> referenced attributes (property-ref) need to be resolved into relational Value references
> -----------------------------------------------------------------------------------------
>
> Key: HHH-7242
> URL: https://hibernate.onjira.com/browse/HHH-7242
> Project: Hibernate ORM
> Issue Type: Task
> Components: metamodel
> Reporter: Steve Ebersole
> Assignee: Steve Ebersole
> Fix For: 5.0.0
>
>
> hbm and annotations both have this same concept, but each does it very differently. Ultimately both need to affect the {{ForeignKey}} target columns. After discussion on IRC (http://transcripts.jboss.org/channel/irc.freenode.org/%23hibernate-dev/2012/%23hibernate-dev.2012-04-11.log.html) the proposed solution is essentially:
> 1) Change {{org.hibernate.metamodel.spi.source.ToOneAttributeSource#getReferencedEntityAttributeName}} to instead be:
> {code:title=ToOneAttributeSource.java|borderStyle=solid}
> public interface ToOneAttributeSource ... {
> public String getReferencedEntityName();
> public JoinColumnResolutionSource getJoinColumnResolutionSource();
> public String getForeignKeyName();
> }
> {code}
> Specifically note that {{getReferencedEntityAttributeName}} becomes {{getJoinColumnResolutionSource}}
> 2) Define the JoinColumnResolutionSource abstraction:
> {code:title=JoinColumnResolutionSource.java|borderStyle=solid}
> public interface JoinColumnResolutionSource {
> public static interface JoinColumnResolutionContext {
> public List<org.hibernate.metamodel.spi.relational.Value> resolveRelationalValuesForAttribute(String attributeName);
> public Column resolveColumn(String logicalTableName, String logicalColumnName);
> public DerivedValue resolveFormula(String logicalTableName, String formula);
> }
> public List<org.hibernate.metamodel.spi.relational.Value> getJoinColumns(JoinColumnResolutionContext context);
> }
> {code}
> As well as the hbm and annotation variants...
> {code:borderStyle=solid}
> public class HbmJoinColumnResolutionSource implements JoinColumnResolutionSource {
> @Override
> public List<org.hibernate.metamodel.spi.relational.Value> getJoinColumns(JoinColumnResolutionContext context) {
> return context.resolveRelationalValuesForAttribute( referencedPropertyName );
> }
> }
> public class AnnotationsJoinColumnResolutionSource implements JoinColumnResolutionSource {
> @Override
> public List<org.hibernate.metamodel.spi.relational.Value> getJoinColumns(JoinColumnResolutionContext context) {
> List<org.hibernate.metamodel.spi.relational.Value> values = ...;
> for ( attributesWithJoinColumns ... ) {
> values.add( context.resolveColumn( joinTableName, joinColumnName ) );
> }
> return values;
> }
> }
> {code}
> 3) Update Binder to use this new API. Currently this is limited to just {{org.hibernate.metamodel.internal.Binder#bindManyToOneAttribute}}
> 4) Update binding classes to no longer expect to be passed the referenced attribute. Identify what, if any, problems that introduces in consumers of the binding classes.
> 5) Identify all other places where {{JoinColumnResolutionSource}} could be used. Secondary table. Collection keys. Others?
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list