Skip to content

Commit

Permalink
HHH-10208 - Index and unique-key constraints not properly handled wit…
Browse files Browse the repository at this point in the history
…h implicit columns in hbm.xml binding
  • Loading branch information
sebersole committed Nov 5, 2015
1 parent 9128b84 commit ec8794b
Show file tree
Hide file tree
Showing 29 changed files with 177 additions and 834 deletions.
Expand Up @@ -19,7 +19,6 @@
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import javax.persistence.AttributeConverter; import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import javax.persistence.Embeddable; import javax.persistence.Embeddable;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.MapsId; import javax.persistence.MapsId;
Expand All @@ -45,11 +44,9 @@
import org.hibernate.boot.model.relational.Database; import org.hibernate.boot.model.relational.Database;
import org.hibernate.boot.model.relational.ExportableProducer; import org.hibernate.boot.model.relational.ExportableProducer;
import org.hibernate.boot.model.relational.Namespace; import org.hibernate.boot.model.relational.Namespace;
import org.hibernate.boot.model.source.internal.ConstraintSecondPass;
import org.hibernate.boot.model.source.internal.ImplicitColumnNamingSecondPass; import org.hibernate.boot.model.source.internal.ImplicitColumnNamingSecondPass;
import org.hibernate.boot.model.source.spi.LocalMetadataBuildingContext; import org.hibernate.boot.model.source.spi.LocalMetadataBuildingContext;
import org.hibernate.boot.spi.AttributeConverterAutoApplyHandler; import org.hibernate.boot.spi.AttributeConverterAutoApplyHandler;
import org.hibernate.boot.spi.AttributeConverterDescriptor;
import org.hibernate.boot.spi.InFlightMetadataCollector; import org.hibernate.boot.spi.InFlightMetadataCollector;
import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.boot.spi.MetadataBuildingContext;
import org.hibernate.boot.spi.MetadataBuildingOptions; import org.hibernate.boot.spi.MetadataBuildingOptions;
Expand Down Expand Up @@ -1452,7 +1449,6 @@ public Join locateJoin(Identifier tableName) {
private ArrayList<CreateKeySecondPass> createKeySecondPasList; private ArrayList<CreateKeySecondPass> createKeySecondPasList;
private ArrayList<SecondaryTableSecondPass> secondaryTableSecondPassList; private ArrayList<SecondaryTableSecondPass> secondaryTableSecondPassList;
private ArrayList<QuerySecondPass> querySecondPassList; private ArrayList<QuerySecondPass> querySecondPassList;
private ArrayList<ConstraintSecondPass> constraintSecondPassList;
private ArrayList<ImplicitColumnNamingSecondPass> implicitColumnNamingSecondPassList; private ArrayList<ImplicitColumnNamingSecondPass> implicitColumnNamingSecondPassList;


private ArrayList<SecondPass> generalSecondPassList; private ArrayList<SecondPass> generalSecondPassList;
Expand Down Expand Up @@ -1485,9 +1481,6 @@ else if ( secondPass instanceof SecondaryTableSecondPass ) {
else if ( secondPass instanceof QuerySecondPass ) { else if ( secondPass instanceof QuerySecondPass ) {
addQuerySecondPass( (QuerySecondPass) secondPass, onTopOfTheQueue ); addQuerySecondPass( (QuerySecondPass) secondPass, onTopOfTheQueue );
} }
else if ( secondPass instanceof ConstraintSecondPass ) {
addConstraintSecondPass( ( ConstraintSecondPass) secondPass, onTopOfTheQueue );
}
else if ( secondPass instanceof ImplicitColumnNamingSecondPass ) { else if ( secondPass instanceof ImplicitColumnNamingSecondPass ) {
addImplicitColumnNamingSecondPass( (ImplicitColumnNamingSecondPass) secondPass ); addImplicitColumnNamingSecondPass( (ImplicitColumnNamingSecondPass) secondPass );
} }
Expand Down Expand Up @@ -1562,13 +1555,6 @@ private void addQuerySecondPass(QuerySecondPass secondPass, boolean onTopOfTheQu
addSecondPass( secondPass, querySecondPassList, onTopOfTheQueue ); addSecondPass( secondPass, querySecondPassList, onTopOfTheQueue );
} }


private void addConstraintSecondPass(ConstraintSecondPass secondPass, boolean onTopOfTheQueue) {
if ( constraintSecondPassList == null ) {
constraintSecondPassList = new ArrayList<ConstraintSecondPass>();
}
addSecondPass( secondPass, constraintSecondPassList, onTopOfTheQueue );
}

private void addImplicitColumnNamingSecondPass(ImplicitColumnNamingSecondPass secondPass) { private void addImplicitColumnNamingSecondPass(ImplicitColumnNamingSecondPass secondPass) {
if ( implicitColumnNamingSecondPassList == null ) { if ( implicitColumnNamingSecondPassList == null ) {
implicitColumnNamingSecondPassList = new ArrayList<ImplicitColumnNamingSecondPass>(); implicitColumnNamingSecondPassList = new ArrayList<ImplicitColumnNamingSecondPass>();
Expand Down Expand Up @@ -1605,7 +1591,6 @@ public void processSecondPasses(MetadataBuildingContext buildingContext) {


secondPassCompileForeignKeys( buildingContext ); secondPassCompileForeignKeys( buildingContext );


processSecondPasses( constraintSecondPassList );
processUniqueConstraintHolders( buildingContext ); processUniqueConstraintHolders( buildingContext );
processJPAIndexHolders( buildingContext ); processJPAIndexHolders( buildingContext );


Expand Down

This file was deleted.

This file was deleted.

Expand Up @@ -33,7 +33,6 @@
import org.hibernate.boot.model.source.spi.AttributeRole; import org.hibernate.boot.model.source.spi.AttributeRole;
import org.hibernate.boot.model.source.spi.AttributeSource; import org.hibernate.boot.model.source.spi.AttributeSource;
import org.hibernate.boot.model.source.spi.AttributeSourceContainer; import org.hibernate.boot.model.source.spi.AttributeSourceContainer;
import org.hibernate.boot.model.source.spi.ConstraintSource;
import org.hibernate.boot.model.source.spi.EntityHierarchySource; import org.hibernate.boot.model.source.spi.EntityHierarchySource;
import org.hibernate.boot.model.source.spi.EntityNamingSource; import org.hibernate.boot.model.source.spi.EntityNamingSource;
import org.hibernate.boot.model.source.spi.EntitySource; import org.hibernate.boot.model.source.spi.EntitySource;
Expand Down Expand Up @@ -79,9 +78,6 @@ public abstract class AbstractEntitySourceImpl


private final ToolingHintContext toolingHintContext; private final ToolingHintContext toolingHintContext;


private Map<String, ConstraintSource> constraintMap = new HashMap<String, ConstraintSource>();


protected AbstractEntitySourceImpl(MappingDocument sourceMappingDocument, JaxbHbmEntityBaseDefinition jaxbEntityMapping) { protected AbstractEntitySourceImpl(MappingDocument sourceMappingDocument, JaxbHbmEntityBaseDefinition jaxbEntityMapping) {
super( sourceMappingDocument ); super( sourceMappingDocument );
this.jaxbEntityMapping = jaxbEntityMapping; this.jaxbEntityMapping = jaxbEntityMapping;
Expand Down Expand Up @@ -223,86 +219,12 @@ public AttributeSourceContainer getAttributeSourceContainer() {
public void addAttributeSource(AttributeSource attributeSource) { public void addAttributeSource(AttributeSource attributeSource) {
attributeSources.add( attributeSource ); attributeSources.add( attributeSource );
} }

@Override
public void registerIndexColumn(String constraintName, String logicalTableName, String columnName) {
registerIndexConstraintColumn( constraintName, logicalTableName, columnName );
}

@Override
public void registerUniqueKeyColumn(String constraintName, String logicalTableName, String columnName) {
registerUniqueKeyConstraintColumn( constraintName, logicalTableName, columnName );
}
}; };
buildAttributeSources( attributeBuildingCallback ); buildAttributeSources( attributeBuildingCallback );


return attributeSources; return attributeSources;
} }


private void registerIndexConstraintColumn(String constraintName, String logicalTableName, String columnName) {
getOrCreateIndexConstraintSource( constraintName, logicalTableName ).addColumnName( columnName );
}

private IndexConstraintSourceImpl getOrCreateIndexConstraintSource(String constraintName, String logicalTableName) {
IndexConstraintSourceImpl constraintSource = (IndexConstraintSourceImpl) constraintMap.get( constraintName );
if ( constraintSource == null ) {
constraintSource = new IndexConstraintSourceImpl( constraintName, logicalTableName );
constraintMap.put( constraintName, constraintSource );
}
else {
// make sure we have the same table name...
if ( !EqualsHelper.equals( constraintSource.getTableName(), logicalTableName ) ) {
throw new MappingException(
String.format(
Locale.ENGLISH,
"Named relational index [%s] referenced more than one table [%s, %s]",
constraintName,
constraintSource.getTableName() == null
? "null(implicit)"
: constraintSource.getTableName(),
logicalTableName == null
? "null(implicit)"
: logicalTableName
),
origin()
);
}
}
return constraintSource;
}

private void registerUniqueKeyConstraintColumn(String constraintName, String logicalTableName, String columnName) {
getOrCreateUniqueKeyConstraintSource( constraintName, logicalTableName ).addColumnName( columnName );
}

private UniqueKeyConstraintSourceImpl getOrCreateUniqueKeyConstraintSource(String constraintName, String logicalTableName) {
UniqueKeyConstraintSourceImpl constraintSource = (UniqueKeyConstraintSourceImpl) constraintMap.get( constraintName );
if ( constraintSource == null ) {
constraintSource = new UniqueKeyConstraintSourceImpl( constraintName, logicalTableName );
constraintMap.put( constraintName, constraintSource );
}
else {
// make sure we have the same table name...
if ( !EqualsHelper.equals( constraintSource.getTableName(), logicalTableName ) ) {
throw new MappingException(
String.format(
Locale.ENGLISH,
"Named relational unique-key [%s] referenced more than one table [%s, %s]",
constraintName,
constraintSource.getTableName() == null
? "null(implicit)"
: constraintSource.getTableName(),
logicalTableName == null
? "null(implicit)"
: logicalTableName
),
origin()
);
}
}
return constraintSource;
}

protected void buildAttributeSources(AttributesHelper.Callback attributeBuildingCallback) { protected void buildAttributeSources(AttributesHelper.Callback attributeBuildingCallback) {
AttributesHelper.processAttributes( AttributesHelper.processAttributes(
sourceMappingDocument(), sourceMappingDocument(),
Expand Down Expand Up @@ -344,22 +266,6 @@ public AttributeSourceContainer getAttributeSourceContainer() {
public void addAttributeSource(AttributeSource attributeSource) { public void addAttributeSource(AttributeSource attributeSource) {
attributeSources.add( attributeSource ); attributeSources.add( attributeSource );
} }

@Override
public void registerIndexColumn(
String constraintName,
String logicalTableName,
String columnName) {
registerIndexConstraintColumn( constraintName, logicalTableName, columnName );
}

@Override
public void registerUniqueKeyColumn(
String constraintName,
String logicalTableName,
String columnName) {
registerUniqueKeyConstraintColumn( constraintName, logicalTableName, columnName );
}
}, },
joinElement.getAttributes(), joinElement.getAttributes(),
logicalTableName, logicalTableName,
Expand Down Expand Up @@ -501,11 +407,6 @@ void add(SubclassEntitySourceImpl subclassEntitySource) {
subclassEntitySources.add( subclassEntitySource ); subclassEntitySources.add( subclassEntitySource );
} }


@Override
public Collection<ConstraintSource> getConstraints() {
return constraintMap.values();
}

@Override @Override
public Map<String,SecondaryTableSource> getSecondaryTableMap() { public Map<String,SecondaryTableSource> getSecondaryTableMap() {
return secondaryTableMap; return secondaryTableMap;
Expand Down
Expand Up @@ -72,20 +72,6 @@ public AttributePath getAttributePathBase() {
public ToolingHintContext getToolingHintContextBaselineForEmbeddable() { public ToolingHintContext getToolingHintContextBaselineForEmbeddable() {
return toolingHintContext; return toolingHintContext;
} }

@Override
public void registerIndexConstraintColumn(
String constraintName,
String logicalTableName,
String columnName) {

}

@Override
public void registerUniqueKeyConstraintColumn(
String constraintName, String logicalTableName, String columnName) {

}
}, },
embeddedAttributeMapping.getEmbeddableMapping(), embeddedAttributeMapping.getEmbeddableMapping(),
nestedAttributeMappings, nestedAttributeMappings,
Expand Down

0 comments on commit ec8794b

Please sign in to comment.