finally move propertyHolder from AnnotatedColumn
This commit is contained in:
parent
585522fde1
commit
18003b92dc
|
@ -72,8 +72,6 @@ public class AnnotatedColumn {
|
|||
private boolean updatable = true;
|
||||
private String explicitTableName; // the JPA @Column annotation lets you specify a table name
|
||||
protected Map<String, Join> joins;
|
||||
@Deprecated // use AnnotatedColumns.propertyHolder
|
||||
protected PropertyHolder propertyHolder;
|
||||
private boolean isImplicit;
|
||||
public String sqlType;
|
||||
private Long length;
|
||||
|
@ -358,7 +356,7 @@ public class AnnotatedColumn {
|
|||
Identifier implicitName = normalizer.normalizeIdentifierQuoting(
|
||||
implicitNamingStrategy.determineBasicColumnName(
|
||||
new ImplicitBasicColumnNameSource() {
|
||||
final AttributePath attributePath = AttributePath.parse(propertyName);
|
||||
final AttributePath attributePath = AttributePath.parse( propertyName );
|
||||
|
||||
@Override
|
||||
public AttributePath getAttributePath() {
|
||||
|
@ -424,12 +422,7 @@ public class AnnotatedColumn {
|
|||
}
|
||||
|
||||
public PropertyHolder getPropertyHolder() {
|
||||
return propertyHolder; //TODO: change this to delegate to the parent
|
||||
}
|
||||
|
||||
@Deprecated // use AnnotatedColumns.setPropertyHolder() instead
|
||||
public void setPropertyHolder(PropertyHolder propertyHolder) {
|
||||
this.propertyHolder = propertyHolder;
|
||||
return parent.getPropertyHolder();
|
||||
}
|
||||
|
||||
protected void setMappingColumn(Column mappingColumn) {
|
||||
|
@ -502,7 +495,7 @@ public class AnnotatedColumn {
|
|||
|
||||
//TODO: move to AnnotatedColumns
|
||||
public boolean isSecondary() {
|
||||
if ( propertyHolder == null ) {
|
||||
if ( getPropertyHolder() == null ) {
|
||||
throw new AssertionFailure( "Should not call isSecondary() on column w/o persistent class defined" );
|
||||
}
|
||||
return isNotEmpty( explicitTableName )
|
||||
|
@ -680,11 +673,11 @@ public class AnnotatedColumn {
|
|||
formulaColumn.setFormula( formulaAnn.value() );
|
||||
formulaColumn.setImplicit( false );
|
||||
formulaColumn.setBuildingContext( context );
|
||||
formulaColumn.setPropertyHolder( propertyHolder );
|
||||
formulaColumn.bind();
|
||||
// formulaColumn.setPropertyHolder( propertyHolder );
|
||||
final AnnotatedColumns result = new AnnotatedColumns();
|
||||
result.setPropertyHolder( propertyHolder );
|
||||
result.setColumns( new AnnotatedColumn[] {formulaColumn} );
|
||||
formulaColumn.bind();
|
||||
return result;
|
||||
}
|
||||
else {
|
||||
|
@ -774,8 +767,8 @@ public class AnnotatedColumn {
|
|||
);
|
||||
}
|
||||
final AnnotatedColumns result = new AnnotatedColumns();
|
||||
result.setPropertyHolder(propertyHolder);
|
||||
result.setColumns(columns);
|
||||
result.setPropertyHolder( propertyHolder );
|
||||
result.setColumns( columns );
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -809,7 +802,7 @@ public class AnnotatedColumn {
|
|||
column.setLength( (long) col.length() );
|
||||
column.setPrecision( col.precision() );
|
||||
column.setScale( col.scale() );
|
||||
column.setPropertyHolder( propertyHolder );
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
column.setPropertyName( getRelativePath( propertyHolder, inferredData.getPropertyName() ) );
|
||||
column.setNullable( col.nullable() ); //TODO force to not null if available? This is a (bad) user choice.
|
||||
if ( comment != null ) {
|
||||
|
@ -824,7 +817,10 @@ public class AnnotatedColumn {
|
|||
column.applyColumnDefault( inferredData, length );
|
||||
column.applyGeneratedAs( inferredData, length );
|
||||
column.applyCheckConstraint( inferredData, length );
|
||||
column.extractDataFromPropertyData( inferredData );
|
||||
column.extractDataFromPropertyData( propertyHolder, inferredData );
|
||||
AnnotatedColumns temp = new AnnotatedColumns();
|
||||
temp.setPropertyHolder( propertyHolder );
|
||||
temp.setColumns( new AnnotatedColumn[] { column } );
|
||||
column.bind();
|
||||
return column;
|
||||
}
|
||||
|
@ -895,12 +891,12 @@ public class AnnotatedColumn {
|
|||
}
|
||||
|
||||
//must only be called after all setters are defined and before binding
|
||||
private void extractDataFromPropertyData(PropertyData inferredData) {
|
||||
private void extractDataFromPropertyData(PropertyHolder propertyHolder, PropertyData inferredData) {
|
||||
if ( inferredData != null ) {
|
||||
XProperty property = inferredData.getProperty();
|
||||
final XProperty property = inferredData.getProperty();
|
||||
if ( property != null ) {
|
||||
if ( getPropertyHolder().isComponent() ) {
|
||||
processColumnTransformerExpressions( getPropertyHolder().getOverriddenColumnTransformer( logicalColumnName ) );
|
||||
if ( propertyHolder.isComponent() ) {
|
||||
processColumnTransformerExpressions( propertyHolder.getOverriddenColumnTransformer( logicalColumnName ) );
|
||||
}
|
||||
processColumnTransformerExpressions( property.getAnnotation( ColumnTransformer.class ) );
|
||||
final ColumnTransformers annotations = property.getAnnotation( ColumnTransformers.class );
|
||||
|
@ -966,7 +962,7 @@ public class AnnotatedColumn {
|
|||
column.setNullable( false );
|
||||
}
|
||||
final String propertyName = inferredData.getPropertyName();
|
||||
column.setPropertyHolder( propertyHolder );
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
column.setPropertyName( getRelativePath( propertyHolder, propertyName ) );
|
||||
column.setJoins( secondaryTables );
|
||||
column.setBuildingContext( context );
|
||||
|
@ -979,7 +975,10 @@ public class AnnotatedColumn {
|
|||
column.applyColumnDefault( inferredData, 1 );
|
||||
column.applyGeneratedAs( inferredData, 1 );
|
||||
column.applyCheckConstraint( inferredData, 1 );
|
||||
column.extractDataFromPropertyData( inferredData );
|
||||
column.extractDataFromPropertyData( propertyHolder, inferredData );
|
||||
AnnotatedColumns temp = new AnnotatedColumns();
|
||||
temp.setPropertyHolder( propertyHolder );
|
||||
temp.setColumns( new AnnotatedColumn[] { column } );
|
||||
column.bind();
|
||||
return column;
|
||||
}
|
||||
|
@ -1020,7 +1019,8 @@ public class AnnotatedColumn {
|
|||
}
|
||||
|
||||
void addIndex(String indexName, boolean inSecondPass) {
|
||||
IndexOrUniqueKeySecondPass secondPass = new IndexOrUniqueKeySecondPass( indexName, this, context, false );
|
||||
final IndexOrUniqueKeySecondPass secondPass =
|
||||
new IndexOrUniqueKeySecondPass( indexName, this, context, false );
|
||||
if ( inSecondPass ) {
|
||||
secondPass.doSecondPass( context.getMetadataCollector().getEntityBindingMap() );
|
||||
}
|
||||
|
@ -1030,7 +1030,8 @@ public class AnnotatedColumn {
|
|||
}
|
||||
|
||||
void addUniqueKey(String uniqueKeyName, boolean inSecondPass) {
|
||||
IndexOrUniqueKeySecondPass secondPass = new IndexOrUniqueKeySecondPass( uniqueKeyName, this, context, true );
|
||||
final IndexOrUniqueKeySecondPass secondPass =
|
||||
new IndexOrUniqueKeySecondPass( uniqueKeyName, this, context, true );
|
||||
if ( inSecondPass ) {
|
||||
secondPass.doSecondPass( context.getMetadataCollector().getEntityBindingMap() );
|
||||
}
|
||||
|
|
|
@ -115,7 +115,7 @@ public class AnnotatedJoinColumn extends AnnotatedColumn {
|
|||
formulaColumn.setFormula( joinFormula.value() );
|
||||
formulaColumn.setReferencedColumn( joinFormula.referencedColumnName() );
|
||||
formulaColumn.setBuildingContext( buildingContext );
|
||||
formulaColumn.setPropertyHolder( propertyHolder );
|
||||
// formulaColumn.setPropertyHolder( propertyHolder );
|
||||
formulaColumn.setPropertyName( getRelativePath( propertyHolder, propertyName ) );
|
||||
formulaColumn.setJoins( joins );
|
||||
formulaColumn.bind();
|
||||
|
@ -161,7 +161,7 @@ public class AnnotatedJoinColumn extends AnnotatedColumn {
|
|||
column.setLogicalColumnName( propertyName + defaultColumnSuffix );
|
||||
}
|
||||
column.setJoins( joins );
|
||||
column.setPropertyHolder( propertyHolder );
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
column.setPropertyName( getRelativePath( propertyHolder, propertyName ) );
|
||||
column.setImplicit( false );
|
||||
column.bind();
|
||||
|
@ -176,7 +176,7 @@ public class AnnotatedJoinColumn extends AnnotatedColumn {
|
|||
MetadataBuildingContext context) {
|
||||
final AnnotatedJoinColumn column = new AnnotatedJoinColumn();
|
||||
column.setJoins( joins );
|
||||
column.setPropertyHolder( propertyHolder );
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
column.setPropertyName( getRelativePath( propertyHolder, propertyName ) );
|
||||
// property name + suffix is an "explicit" column name
|
||||
if ( isNotEmpty( defaultColumnSuffix ) ) {
|
||||
|
@ -273,7 +273,7 @@ public class AnnotatedJoinColumn extends AnnotatedColumn {
|
|||
column.setSqlType( columnDef );
|
||||
column.setLogicalColumnName( logicalColumnName );
|
||||
column.setReferencedColumn( referencedColumnName );
|
||||
column.setPropertyHolder(propertyHolder);
|
||||
// column.setPropertyHolder(propertyHolder);
|
||||
column.setJoins(joins);
|
||||
column.setBuildingContext(context);
|
||||
column.setImplicit( false );
|
||||
|
@ -290,7 +290,7 @@ public class AnnotatedJoinColumn extends AnnotatedColumn {
|
|||
final AnnotatedJoinColumn column = new AnnotatedJoinColumn();
|
||||
final ObjectNameNormalizer normalizer = context.getObjectNameNormalizer();
|
||||
column.setLogicalColumnName( normalizer.normalizeIdentifierQuotingAsString(defaultColumnName) );
|
||||
column.setPropertyHolder(propertyHolder);
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
column.setJoins(joins);
|
||||
column.setBuildingContext(context);
|
||||
column.setImplicit( true );
|
||||
|
@ -504,7 +504,7 @@ public class AnnotatedJoinColumn extends AnnotatedColumn {
|
|||
final AnnotatedJoinColumn column = new AnnotatedJoinColumn();
|
||||
column.setImplicit( true );
|
||||
column.setNullable( false ); //I break the spec, but it's for good
|
||||
column.setPropertyHolder( propertyHolder );
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
column.setPropertyName( getRelativePath( propertyHolder, propertyName ) );
|
||||
column.setJoins( secondaryTables );
|
||||
column.setBuildingContext( context );
|
||||
|
@ -520,7 +520,7 @@ public class AnnotatedJoinColumn extends AnnotatedColumn {
|
|||
JoinColumn joinColumn) {
|
||||
final AnnotatedJoinColumn column = new AnnotatedJoinColumn();
|
||||
column.setImplicit( true );
|
||||
column.setPropertyHolder(propertyHolder);
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
column.setPropertyName( getRelativePath( propertyHolder, propertyName ) );
|
||||
column.setJoins( secondaryTables );
|
||||
column.setBuildingContext( context );
|
||||
|
|
|
@ -48,7 +48,6 @@ import static org.hibernate.internal.util.StringHelper.qualify;
|
|||
public class AnnotatedJoinColumns extends AnnotatedColumns {
|
||||
|
||||
private AnnotatedJoinColumn[] columns;
|
||||
private PropertyHolder propertyHolder;
|
||||
private String propertyName; // this is really a .-separated property path
|
||||
private MetadataBuildingContext buildingContext;
|
||||
|
||||
|
@ -247,14 +246,6 @@ public class AnnotatedJoinColumns extends AnnotatedColumns {
|
|||
return mappedByTableName;
|
||||
}
|
||||
|
||||
public PropertyHolder getPropertyHolder() {
|
||||
return propertyHolder;
|
||||
}
|
||||
|
||||
public void setPropertyHolder(PropertyHolder propertyHolder) {
|
||||
this.propertyHolder = propertyHolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Override persistent class on oneToMany Cases for late settings
|
||||
* Must only be used on second level pass binding
|
||||
|
@ -264,15 +255,16 @@ public class AnnotatedJoinColumns extends AnnotatedColumns {
|
|||
Map<String, Join> joins,
|
||||
Map<XClass, InheritanceState> inheritanceStatePerClass) {
|
||||
// TODO shouldn't we deduce the class name from the persistentClass?
|
||||
propertyHolder = buildPropertyHolder(
|
||||
final PropertyHolder propertyHolder = buildPropertyHolder(
|
||||
persistentClass,
|
||||
joins,
|
||||
buildingContext,
|
||||
inheritanceStatePerClass
|
||||
);
|
||||
for ( AnnotatedJoinColumn column : columns ) {
|
||||
column.setPropertyHolder( propertyHolder );
|
||||
}
|
||||
setPropertyHolder( propertyHolder );
|
||||
// for ( AnnotatedJoinColumn column : columns ) {
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
// }
|
||||
}
|
||||
|
||||
public void setBuildingContext(MetadataBuildingContext buildingContext) {
|
||||
|
@ -479,7 +471,7 @@ public class AnnotatedJoinColumns extends AnnotatedColumns {
|
|||
String.format(
|
||||
Locale.ENGLISH,
|
||||
"Association '%s' is 'mappedBy' a property '%s' of entity '%s' with no columns",
|
||||
propertyHolder.getPath(),
|
||||
getPropertyHolder().getPath(),
|
||||
getMappedByPropertyName(),
|
||||
getMappedByEntityName()
|
||||
)
|
||||
|
@ -491,9 +483,9 @@ public class AnnotatedJoinColumns extends AnnotatedColumns {
|
|||
String.format(
|
||||
Locale.ENGLISH,
|
||||
"Association '%s' is 'mappedBy' a property '%s' of entity '%s' which maps to a formula",
|
||||
propertyHolder.getPath(),
|
||||
getPropertyHolder().getPath(),
|
||||
getMappedByPropertyName(),
|
||||
propertyHolder.getPath()
|
||||
getPropertyHolder().getPath()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@ -502,9 +494,9 @@ public class AnnotatedJoinColumns extends AnnotatedColumns {
|
|||
String.format(
|
||||
Locale.ENGLISH,
|
||||
"Association '%s' is 'mappedBy' a property '%s' of entity '%s' with multiple columns",
|
||||
propertyHolder.getPath(),
|
||||
getPropertyHolder().getPath(),
|
||||
getMappedByPropertyName(),
|
||||
propertyHolder.getPath()
|
||||
getPropertyHolder().getPath()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
@ -60,7 +60,8 @@ public class IndexColumn extends AnnotatedColumn {
|
|||
column.setLogicalColumnName( inferredData.getPropertyName() + "_ORDER" ); //JPA default name
|
||||
column.setImplicit( true );
|
||||
column.setBuildingContext( context );
|
||||
column.setPropertyHolder( propertyHolder );
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
createParent( propertyHolder, column );
|
||||
column.bind();
|
||||
}
|
||||
|
||||
|
@ -71,6 +72,12 @@ public class IndexColumn extends AnnotatedColumn {
|
|||
return column;
|
||||
}
|
||||
|
||||
private static void createParent(PropertyHolder propertyHolder, IndexColumn column) {
|
||||
final AnnotatedColumns columns = new AnnotatedColumns();
|
||||
columns.setColumns( new AnnotatedColumn[] {column} );
|
||||
columns.setPropertyHolder( propertyHolder );
|
||||
}
|
||||
|
||||
public int getBase() {
|
||||
return base;
|
||||
}
|
||||
|
@ -82,7 +89,7 @@ public class IndexColumn extends AnnotatedColumn {
|
|||
/**
|
||||
* JPA 2 {@link OrderColumn @OrderColumn} processing.
|
||||
*
|
||||
* @param ann The OrderColumn annotation instance
|
||||
* @param orderColumn The OrderColumn annotation instance
|
||||
* @param propertyHolder Information about the property
|
||||
* @param inferredData Yeah, right. Uh...
|
||||
* @param secondaryTables Any secondary tables available.
|
||||
|
@ -90,24 +97,25 @@ public class IndexColumn extends AnnotatedColumn {
|
|||
* @return The index column
|
||||
*/
|
||||
public static IndexColumn buildColumnFromAnnotation(
|
||||
OrderColumn ann,
|
||||
OrderColumn orderColumn,
|
||||
PropertyHolder propertyHolder,
|
||||
PropertyData inferredData,
|
||||
Map<String, Join> secondaryTables,
|
||||
MetadataBuildingContext buildingContext) {
|
||||
if ( ann != null ) {
|
||||
final String sqlType = isEmptyAnnotationValue( ann.columnDefinition() ) ? null : ann.columnDefinition();
|
||||
final String name = isEmptyAnnotationValue( ann.name() ) ? inferredData.getPropertyName() + "_ORDER" : ann.name();
|
||||
if ( orderColumn != null ) {
|
||||
final String sqlType = isEmptyAnnotationValue( orderColumn.columnDefinition() ) ? null : orderColumn.columnDefinition();
|
||||
final String name = isEmptyAnnotationValue( orderColumn.name() ) ? inferredData.getPropertyName() + "_ORDER" : orderColumn.name();
|
||||
//TODO move it to a getter based system and remove the constructor
|
||||
final IndexColumn column = new IndexColumn();
|
||||
column.setLogicalColumnName( name );
|
||||
column.setSqlType( sqlType );
|
||||
column.setNullable( ann.nullable() );
|
||||
column.setNullable( orderColumn.nullable() );
|
||||
column.setJoins( secondaryTables );
|
||||
column.setInsertable( ann.insertable() );
|
||||
column.setUpdatable( ann.updatable() );
|
||||
column.setInsertable( orderColumn.insertable() );
|
||||
column.setUpdatable( orderColumn.updatable() );
|
||||
column.setBuildingContext( buildingContext );
|
||||
column.setPropertyHolder( propertyHolder );
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
createParent( propertyHolder, column );
|
||||
column.bind();
|
||||
return column;
|
||||
}
|
||||
|
@ -115,7 +123,8 @@ public class IndexColumn extends AnnotatedColumn {
|
|||
final IndexColumn column = new IndexColumn();
|
||||
column.setImplicit( true );
|
||||
column.setBuildingContext( buildingContext );
|
||||
column.setPropertyHolder( propertyHolder );
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
createParent( propertyHolder, column );
|
||||
column.bind();
|
||||
return column;
|
||||
}
|
||||
|
@ -145,7 +154,8 @@ public class IndexColumn extends AnnotatedColumn {
|
|||
column.setNullable( ann.nullable() );
|
||||
column.setBase( ann.base() );
|
||||
column.setBuildingContext( buildingContext );
|
||||
column.setPropertyHolder( propertyHolder );
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
createParent( propertyHolder, column );
|
||||
column.bind();
|
||||
return column;
|
||||
}
|
||||
|
@ -153,7 +163,8 @@ public class IndexColumn extends AnnotatedColumn {
|
|||
final IndexColumn column = new IndexColumn();
|
||||
column.setImplicit( true );
|
||||
column.setBuildingContext( buildingContext );
|
||||
column.setPropertyHolder( propertyHolder );
|
||||
// column.setPropertyHolder( propertyHolder );
|
||||
createParent( propertyHolder, column );
|
||||
column.bind();
|
||||
return column;
|
||||
}
|
||||
|
|
|
@ -89,6 +89,8 @@ import org.hibernate.boot.spi.InFlightMetadataCollector;
|
|||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||
import org.hibernate.cfg.AccessType;
|
||||
import org.hibernate.cfg.AnnotatedClassType;
|
||||
import org.hibernate.cfg.AnnotatedColumn;
|
||||
import org.hibernate.cfg.AnnotatedColumns;
|
||||
import org.hibernate.cfg.AnnotatedDiscriminatorColumn;
|
||||
import org.hibernate.cfg.AnnotatedJoinColumns;
|
||||
import org.hibernate.cfg.AnnotationBinder;
|
||||
|
@ -788,7 +790,11 @@ public class EntityBinder {
|
|||
throw new AssertionFailure( "discriminator column should have been built" );
|
||||
}
|
||||
discriminatorColumn.setJoins( secondaryTables );
|
||||
discriminatorColumn.setPropertyHolder( propertyHolder );
|
||||
// discriminatorColumn.setPropertyHolder( propertyHolder );
|
||||
final AnnotatedColumns columns = new AnnotatedColumns();
|
||||
columns.setColumns( new AnnotatedColumn[] { discriminatorColumn } );
|
||||
columns.setPropertyHolder( propertyHolder );
|
||||
|
||||
final BasicValue discriminatorColumnBinding = new BasicValue( context, rootClass.getTable() );
|
||||
rootClass.setDiscriminator( discriminatorColumnBinding );
|
||||
discriminatorColumn.linkWithValue( discriminatorColumnBinding );
|
||||
|
|
|
@ -86,11 +86,13 @@ public class ListBinder extends CollectionBinder {
|
|||
if ( !listValueMapping.isOneToMany() ) {
|
||||
indexColumn.forceNotNull();
|
||||
}
|
||||
indexColumn.setPropertyHolder( valueHolder );
|
||||
// indexColumn.setPropertyHolder( valueHolder );
|
||||
final AnnotatedColumns columns = new AnnotatedColumns();
|
||||
columns.setColumns( new AnnotatedColumn[] { indexColumn } );
|
||||
columns.setPropertyHolder( valueHolder );
|
||||
|
||||
final BasicValueBinder valueBinder = new BasicValueBinder( BasicValueBinder.Kind.LIST_INDEX, buildingContext );
|
||||
final AnnotatedColumns result = new AnnotatedColumns();
|
||||
result.setColumns( new AnnotatedColumn[] { indexColumn } );
|
||||
valueBinder.setColumns(result);
|
||||
valueBinder.setColumns( columns );
|
||||
valueBinder.setReturnedClassName( Integer.class.getName() );
|
||||
valueBinder.setType( property, getElementType(), null, null );
|
||||
// valueBinder.setExplicitType( "integer" );
|
||||
|
|
|
@ -199,7 +199,7 @@ public class PropertyBinder {
|
|||
basicValueBinder.setAccessType( accessType );
|
||||
|
||||
|
||||
SimpleValue propertyValue = basicValueBinder.make();
|
||||
final SimpleValue propertyValue = basicValueBinder.make();
|
||||
setValue( propertyValue );
|
||||
return makeProperty();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue