Created
September 23, 2014 21:42
-
-
Save gbadner/1bceb7eb2eab59f7fcdf to your computer and use it in GitHub Desktop.
Latest diff
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/Ejb3Column.java b/hibernate-core/src/main/java/org/hibernate/cfg/Ejb3Column.java | |
index c6a2856..c10a5ee 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/cfg/Ejb3Column.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/cfg/Ejb3Column.java | |
@@ -34,6 +34,7 @@ import org.hibernate.annotations.ColumnTransformers; | |
import org.hibernate.annotations.Index; | |
import org.hibernate.annotations.common.reflection.XProperty; | |
import org.hibernate.cfg.annotations.Nullability; | |
+import org.hibernate.cfg.naming.ImplicitAttributeColumnNameSource; | |
import org.hibernate.internal.CoreMessageLogger; | |
import org.hibernate.internal.util.StringHelper; | |
import org.hibernate.mapping.Column; | |
@@ -41,6 +42,7 @@ import org.hibernate.mapping.Formula; | |
import org.hibernate.mapping.Join; | |
import org.hibernate.mapping.SimpleValue; | |
import org.hibernate.mapping.Table; | |
+import org.hibernate.metamodel.relational.Identifier; | |
/** | |
* Wrap state of an EJB3 @Column annotation | |
@@ -243,21 +245,32 @@ public class Ejb3Column { | |
return mappingColumn == null || StringHelper.isEmpty( mappingColumn.getName() ); | |
} | |
- public void redefineColumnName(String columnName, String propertyName, boolean applyNamingStrategy) { | |
+ public void redefineColumnName(String columnName, final String propertyName, boolean applyNamingStrategy) { | |
if ( applyNamingStrategy ) { | |
if ( StringHelper.isEmpty( columnName ) ) { | |
if ( propertyName != null ) { | |
+ Identifier columnIdentifier = mappings.getImplicitNamingStrategy().determineAttributeColumnName( | |
+ new ImplicitAttributeColumnNameSource() { | |
+ @Override | |
+ public String getAttributePath() { | |
+ return propertyName; | |
+ } | |
+ } | |
+ ); | |
+ columnIdentifier = | |
+ mappings.getPhysicalNamingStrategy().toPhysicalColumnName( columnIdentifier ); | |
mappingColumn.setName( | |
- mappings.getObjectNameNormalizer().normalizeIdentifierQuoting( | |
- mappings.getNamingStrategy().propertyToColumnName( propertyName ) | |
- ) | |
+ mappings.getObjectNameNormalizer().normalizeIdentifierQuoting( columnIdentifier.getName() ) | |
); | |
} | |
//Do nothing otherwise | |
} | |
else { | |
columnName = mappings.getObjectNameNormalizer().normalizeIdentifierQuoting( columnName ); | |
- columnName = mappings.getNamingStrategy().columnName( columnName ); | |
+ columnName = | |
+ mappings.getPhysicalNamingStrategy() | |
+ .toPhysicalColumnName( Identifier.toIdentifier( columnName ) ) | |
+ .getName(); | |
columnName = mappings.getObjectNameNormalizer().normalizeIdentifierQuoting( columnName ); | |
mappingColumn.setName( columnName ); | |
} | |
diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/HbmBinder.java b/hibernate-core/src/main/java/org/hibernate/cfg/HbmBinder.java | |
index 218e52e..21ff95d 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/cfg/HbmBinder.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/cfg/HbmBinder.java | |
@@ -35,6 +35,7 @@ import org.hibernate.EntityMode; | |
import org.hibernate.FetchMode; | |
import org.hibernate.FlushMode; | |
import org.hibernate.MappingException; | |
+import org.hibernate.cfg.naming.ImplicitAttributeColumnNameSource; | |
import org.hibernate.engine.internal.Versioning; | |
import org.hibernate.engine.spi.ExecuteUpdateResultCheckStyle; | |
import org.hibernate.engine.spi.FilterDefinition; | |
@@ -1147,7 +1148,16 @@ public final class HbmBinder { | |
Column column = new Column(); | |
column.setValue( simpleValue ); | |
bindColumn( node, column, isNullable ); | |
- column.setName( mappings.getNamingStrategy().propertyToColumnName( propertyPath ) ); | |
+ Identifier columnIdentifier = mappings.getImplicitNamingStrategy().determineAttributeColumnName( | |
+ new ImplicitAttributeColumnNameSource() { | |
+ @Override | |
+ public String getAttributePath() { | |
+ return propertyPath; | |
+ } | |
+ } | |
+ ); | |
+ columnIdentifier = mappings.getPhysicalNamingStrategy().toPhysicalColumnName( columnIdentifier ); | |
+ column.setName( columnIdentifier.getName() ); | |
String logicalName = mappings.getNamingStrategy().logicalColumnName( null, propertyPath ); | |
mappings.addColumnBinding( logicalName, column, table ); | |
/* TODO: joinKeyColumnName & foreignKeyColumnName should be called either here or at a | |
diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitAttributeColumnNameSource.java b/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitAttributeColumnNameSource.java | |
index e3d96ec..b807034 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitAttributeColumnNameSource.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitAttributeColumnNameSource.java | |
@@ -1,7 +1,40 @@ | |
+/* | |
+ * Hibernate, Relational Persistence for Idiomatic Java | |
+ * | |
+ * Copyright (c) 2014, Red Hat Inc. or third-party contributors as | |
+ * indicated by the @author tags or express copyright attribution | |
+ * statements applied by the authors. All third-party contributions are | |
+ * distributed under license by Red Hat Inc. | |
+ * | |
+ * This copyrighted material is made available to anyone wishing to use, modify, | |
+ * copy, or redistribute it subject to the terms and conditions of the GNU | |
+ * Lesser General Public License, as published by the Free Software Foundation. | |
+ * | |
+ * This program is distributed in the hope that it will be useful, | |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License | |
+ * for more details. | |
+ * | |
+ * You should have received a copy of the GNU Lesser General Public License | |
+ * along with this distribution; if not, write to: | |
+ * Free Software Foundation, Inc. | |
+ * 51 Franklin Street, Fifth Floor | |
+ * Boston, MA 02110-1301 USA | |
+ */ | |
package org.hibernate.cfg.naming; | |
/** | |
- * Created by gbadner on 9/23/14. | |
+ * Access to the source information used to determine the logical name for a column generated for an attribute. | |
+ * | |
+ * @author Gail Badner | |
+ * | |
*/ | |
public interface ImplicitAttributeColumnNameSource { | |
+ | |
+ /** | |
+ * Access to the attribute path (not qualified by the entity name). | |
+ * | |
+ * @return The attribute path. | |
+ */ | |
+ public String getAttributePath(); | |
} | |
diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitNamingStrategy.java b/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitNamingStrategy.java | |
index 7de4890..51c89ba 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitNamingStrategy.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitNamingStrategy.java | |
@@ -59,4 +59,6 @@ public interface ImplicitNamingStrategy { | |
* @return The logical name. | |
*/ | |
public Identifier determineCollectionTableLogicalName(ImplicitCollectionTableNameSource source); | |
+ | |
+ public Identifier determineAttributeColumnName(ImplicitAttributeColumnNameSource source); | |
} | |
diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitNamingStrategyDelegatingImpl.java b/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitNamingStrategyDelegatingImpl.java | |
index 39fc16a..b79b7e5 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitNamingStrategyDelegatingImpl.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitNamingStrategyDelegatingImpl.java | |
@@ -75,4 +75,10 @@ public class ImplicitNamingStrategyDelegatingImpl implements ImplicitNamingStrat | |
); | |
return Identifier.toIdentifier( tableName ); | |
} | |
+ | |
+ @Override | |
+ public Identifier determineAttributeColumnName(ImplicitAttributeColumnNameSource source) { | |
+ final String columnName = namingStrategy.propertyToColumnName( source.getAttributePath() ); | |
+ return Identifier.toIdentifier( columnName ); | |
+ } | |
} | |
diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitNamingStrategyStandardImpl.java b/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitNamingStrategyStandardImpl.java | |
index a35c84c..f3ca2fd 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitNamingStrategyStandardImpl.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/cfg/naming/ImplicitNamingStrategyStandardImpl.java | |
@@ -103,4 +103,13 @@ public class ImplicitNamingStrategyStandardImpl implements ImplicitNamingStrateg | |
return Identifier.toIdentifier( tableName ); | |
} | |
+ | |
+ @Override | |
+ public Identifier determineAttributeColumnName(ImplicitAttributeColumnNameSource source) { | |
+ // JPA states we shoulduse the following as default: | |
+ // "The property or field name" | |
+ // aka: | |
+ // The unqualified attribute path. | |
+ return Identifier.toIdentifier( StringHelper.unqualify( source.getAttributePath() ) ); | |
+ } | |
} | |
diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/naming/PhysicalNamingStrategy.java b/hibernate-core/src/main/java/org/hibernate/cfg/naming/PhysicalNamingStrategy.java | |
index 593a864..c8543c9 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/cfg/naming/PhysicalNamingStrategy.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/cfg/naming/PhysicalNamingStrategy.java | |
@@ -36,4 +36,5 @@ import org.hibernate.metamodel.relational.Identifier; | |
*/ | |
public interface PhysicalNamingStrategy { | |
public Identifier toPhysicalTableName(Identifier name); | |
+ public Identifier toPhysicalColumnName(Identifier name); | |
} | |
diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/naming/PhysicalNamingStrategyDelegatingImpl.java b/hibernate-core/src/main/java/org/hibernate/cfg/naming/PhysicalNamingStrategyDelegatingImpl.java | |
index bdc66a9..5057ba1 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/cfg/naming/PhysicalNamingStrategyDelegatingImpl.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/cfg/naming/PhysicalNamingStrategyDelegatingImpl.java | |
@@ -46,4 +46,9 @@ public class PhysicalNamingStrategyDelegatingImpl implements PhysicalNamingStrat | |
public Identifier toPhysicalTableName(Identifier name) { | |
return Identifier.toIdentifier( namingStrategy.tableName( name.getName() ) ); | |
} | |
+ | |
+ @Override | |
+ public Identifier toPhysicalColumnName(Identifier name) { | |
+ return Identifier.toIdentifier( namingStrategy.columnName( name.getName() ) ); | |
+ } | |
} | |
diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/naming/PhysicalNamingStrategyStandardImpl.java b/hibernate-core/src/main/java/org/hibernate/cfg/naming/PhysicalNamingStrategyStandardImpl.java | |
index e333b3f..a33f71a 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/cfg/naming/PhysicalNamingStrategyStandardImpl.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/cfg/naming/PhysicalNamingStrategyStandardImpl.java | |
@@ -40,4 +40,9 @@ public class PhysicalNamingStrategyStandardImpl implements PhysicalNamingStrateg | |
public Identifier toPhysicalTableName(Identifier logicalTableName) { | |
return logicalTableName; | |
} | |
+ | |
+ @Override | |
+ public Identifier toPhysicalColumnName(Identifier logicalColumnName) { | |
+ return logicalColumnName; | |
+ } | |
} | |
diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/Metadata.java b/hibernate-core/src/main/java/org/hibernate/metamodel/Metadata.java | |
index 0313e26..02055c8 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/metamodel/Metadata.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/metamodel/Metadata.java | |
@@ -30,6 +30,8 @@ import javax.persistence.SharedCacheMode; | |
import org.hibernate.SessionFactory; | |
import org.hibernate.cache.spi.access.AccessType; | |
import org.hibernate.cfg.NamingStrategy; | |
+import org.hibernate.cfg.naming.ImplicitNamingStrategy; | |
+import org.hibernate.cfg.naming.PhysicalNamingStrategy; | |
import org.hibernate.engine.ResultSetMappingDefinition; | |
import org.hibernate.engine.spi.FilterDefinition; | |
import org.hibernate.engine.spi.NamedQueryDefinition; | |
@@ -50,6 +52,8 @@ public interface Metadata { | |
public static interface Options { | |
public MetadataSourceProcessingOrder getMetadataSourceProcessingOrder(); | |
public NamingStrategy getNamingStrategy(); | |
+ public ImplicitNamingStrategy getImplicitNamingStrategy(); | |
+ public PhysicalNamingStrategy getPhysicalNamingStrategy(); | |
public SharedCacheMode getSharedCacheMode(); | |
public AccessType getDefaultAccessType(); | |
public boolean useNewIdentifierGenerators(); | |
diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/BindingContext.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/BindingContext.java | |
index 6fbcfc0..56cda1b 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/BindingContext.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/BindingContext.java | |
@@ -24,6 +24,8 @@ | |
package org.hibernate.metamodel.source; | |
import org.hibernate.cfg.NamingStrategy; | |
+import org.hibernate.cfg.naming.ImplicitNamingStrategy; | |
+import org.hibernate.cfg.naming.PhysicalNamingStrategy; | |
import org.hibernate.internal.util.ValueHolder; | |
import org.hibernate.metamodel.domain.Type; | |
import org.hibernate.service.ServiceRegistry; | |
@@ -36,6 +38,10 @@ public interface BindingContext { | |
public NamingStrategy getNamingStrategy(); | |
+ public ImplicitNamingStrategy getImplicitNamingStrategy(); | |
+ | |
+ public PhysicalNamingStrategy getPhysicalNamingStrategy(); | |
+ | |
public MappingDefaults getMappingDefaults(); | |
public MetadataImplementor getMetadataImplementor(); | |
diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/AnnotationBindingContextImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/AnnotationBindingContextImpl.java | |
index b3aa93d..cc3b481 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/AnnotationBindingContextImpl.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/AnnotationBindingContextImpl.java | |
@@ -35,6 +35,8 @@ import org.jboss.jandex.DotName; | |
import org.jboss.jandex.Index; | |
import org.hibernate.cfg.NamingStrategy; | |
+import org.hibernate.cfg.naming.ImplicitNamingStrategy; | |
+import org.hibernate.cfg.naming.PhysicalNamingStrategy; | |
import org.hibernate.internal.util.ValueHolder; | |
import org.hibernate.metamodel.domain.Type; | |
import org.hibernate.metamodel.source.MappingDefaults; | |
@@ -117,6 +119,16 @@ public class AnnotationBindingContextImpl implements AnnotationBindingContext { | |
} | |
@Override | |
+ public ImplicitNamingStrategy getImplicitNamingStrategy() { | |
+ return null; | |
+ } | |
+ | |
+ @Override | |
+ public PhysicalNamingStrategy getPhysicalNamingStrategy() { | |
+ return null; | |
+ } | |
+ | |
+ @Override | |
public MappingDefaults getMappingDefaults() { | |
return metadata.getMappingDefaults(); | |
} | |
diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/attribute/ColumnSourceImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/attribute/ColumnSourceImpl.java | |
index 2323186..2bd2ff2 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/attribute/ColumnSourceImpl.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/attribute/ColumnSourceImpl.java | |
@@ -23,6 +23,7 @@ | |
*/ | |
package org.hibernate.metamodel.source.annotations.attribute; | |
+import org.hibernate.cfg.naming.ImplicitAttributeColumnNameSource; | |
import org.hibernate.internal.util.StringHelper; | |
/** | |
@@ -44,7 +45,14 @@ public class ColumnSourceImpl extends ColumnValuesSourceImpl { | |
protected String resolveColumnName() { | |
if ( StringHelper.isEmpty( super.getName() ) ) { | |
//no @Column defined. | |
- return attribute.getContext().getNamingStrategy().propertyToColumnName( attribute.getName() ); | |
+ return attribute.getContext().getImplicitNamingStrategy().determineAttributeColumnName( | |
+ new ImplicitAttributeColumnNameSource() { | |
+ @Override | |
+ public String getAttributePath() { | |
+ return attribute.getName(); | |
+ } | |
+ } | |
+ ).getName(); | |
} | |
else { | |
return super.getName(); | |
diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/entity/EntityBindingContext.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/entity/EntityBindingContext.java | |
index 9dccc0d..0e9e0c8 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/entity/EntityBindingContext.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/entity/EntityBindingContext.java | |
@@ -29,6 +29,8 @@ import org.jboss.jandex.ClassInfo; | |
import org.jboss.jandex.Index; | |
import org.hibernate.cfg.NamingStrategy; | |
+import org.hibernate.cfg.naming.ImplicitNamingStrategy; | |
+import org.hibernate.cfg.naming.PhysicalNamingStrategy; | |
import org.hibernate.internal.jaxb.Origin; | |
import org.hibernate.internal.jaxb.SourceType; | |
import org.hibernate.internal.util.ValueHolder; | |
@@ -69,6 +71,16 @@ public class EntityBindingContext implements LocalBindingContext, AnnotationBind | |
} | |
@Override | |
+ public ImplicitNamingStrategy getImplicitNamingStrategy() { | |
+ return contextDelegate.getImplicitNamingStrategy(); | |
+ } | |
+ | |
+ @Override | |
+ public PhysicalNamingStrategy getPhysicalNamingStrategy() { | |
+ return contextDelegate.getPhysicalNamingStrategy(); | |
+ } | |
+ | |
+ @Override | |
public MappingDefaults getMappingDefaults() { | |
return contextDelegate.getMappingDefaults(); | |
} | |
diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/binder/Binder.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/binder/Binder.java | |
index 2e5e2c8..ddfaea9 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/binder/Binder.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/binder/Binder.java | |
@@ -34,6 +34,7 @@ import java.util.Map; | |
import org.hibernate.AssertionFailure; | |
import org.hibernate.EntityMode; | |
import org.hibernate.cfg.NotYetImplementedException; | |
+import org.hibernate.cfg.naming.ImplicitAttributeColumnNameSource; | |
import org.hibernate.id.IdentifierGenerator; | |
import org.hibernate.internal.util.StringHelper; | |
import org.hibernate.internal.util.beans.BeanInfoHelper; | |
@@ -1008,7 +1009,7 @@ public class Binder { | |
private void bindRelationalValues( | |
RelationalValueSourceContainer relationalValueSourceContainer, | |
- SingularAttributeBinding attributeBinding) { | |
+ final SingularAttributeBinding attributeBinding) { | |
List<SimpleValueBinding> valueBindings = new ArrayList<SimpleValueBinding>(); | |
@@ -1039,14 +1040,18 @@ public class Binder { | |
} | |
} | |
else { | |
- String name = metadata.getOptions() | |
- .getNamingStrategy() | |
- .propertyToColumnName( attributeBinding.getAttribute().getName() ); | |
- name = quoteIdentifier( name ); | |
+ Identifier columnIdentifier = metadata.getOptions().getImplicitNamingStrategy().determineAttributeColumnName( | |
+ new ImplicitAttributeColumnNameSource() { | |
+ @Override | |
+ public String getAttributePath() { | |
+ return attributeBinding.getAttribute().getName(); | |
+ } | |
+ } | |
+ ); | |
Column column = attributeBinding.getContainer() | |
.seekEntityBinding() | |
.getPrimaryTable() | |
- .locateOrCreateColumn( name ); | |
+ .locateOrCreateColumn( quoteIdentifier( columnIdentifier.getName() ) ); | |
column.setNullable( relationalValueSourceContainer.areValuesNullableByDefault() ); | |
valueBindings.add( | |
new SimpleValueBinding( | |
diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/hbm/MappingDocument.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/hbm/MappingDocument.java | |
index b9d8cb6..e6d8904 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/hbm/MappingDocument.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/hbm/MappingDocument.java | |
@@ -26,6 +26,8 @@ package org.hibernate.metamodel.source.hbm; | |
import java.util.List; | |
import org.hibernate.cfg.NamingStrategy; | |
+import org.hibernate.cfg.naming.ImplicitNamingStrategy; | |
+import org.hibernate.cfg.naming.PhysicalNamingStrategy; | |
import org.hibernate.internal.jaxb.JaxbRoot; | |
import org.hibernate.internal.jaxb.Origin; | |
import org.hibernate.internal.jaxb.mapping.hbm.EntityElement; | |
@@ -111,6 +113,16 @@ public class MappingDocument { | |
} | |
@Override | |
+ public ImplicitNamingStrategy getImplicitNamingStrategy() { | |
+ return metadata.getImplicitNamingStrategy(); | |
+ } | |
+ | |
+ @Override | |
+ public PhysicalNamingStrategy getPhysicalNamingStrategy() { | |
+ return metadata.getPhysicalNamingStrategy(); | |
+ } | |
+ | |
+ @Override | |
public MappingDefaults getMappingDefaults() { | |
return localMappingDefaults; | |
} | |
diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/MetadataBuilderImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/MetadataBuilderImpl.java | |
index 5e07de1..fc8d25c 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/MetadataBuilderImpl.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/MetadataBuilderImpl.java | |
@@ -29,6 +29,12 @@ import org.hibernate.cache.spi.access.AccessType; | |
import org.hibernate.cfg.AvailableSettings; | |
import org.hibernate.cfg.EJB3NamingStrategy; | |
import org.hibernate.cfg.NamingStrategy; | |
+import org.hibernate.cfg.naming.ImplicitNamingStrategy; | |
+import org.hibernate.cfg.naming.ImplicitNamingStrategyDelegatingImpl; | |
+import org.hibernate.cfg.naming.ImplicitNamingStrategyStandardImpl; | |
+import org.hibernate.cfg.naming.PhysicalNamingStrategy; | |
+import org.hibernate.cfg.naming.PhysicalNamingStrategyDelegatingImpl; | |
+import org.hibernate.cfg.naming.PhysicalNamingStrategyStandardImpl; | |
import org.hibernate.metamodel.Metadata; | |
import org.hibernate.metamodel.MetadataBuilder; | |
import org.hibernate.metamodel.MetadataSourceProcessingOrder; | |
@@ -50,7 +56,7 @@ public class MetadataBuilderImpl implements MetadataBuilder { | |
@Override | |
public MetadataBuilder with(NamingStrategy namingStrategy) { | |
- this.options.namingStrategy = namingStrategy; | |
+ this.options.setNamingStrategy( namingStrategy ); | |
return this; | |
} | |
@@ -85,7 +91,9 @@ public class MetadataBuilderImpl implements MetadataBuilder { | |
private static class OptionsImpl implements Metadata.Options { | |
private MetadataSourceProcessingOrder metadataSourceProcessingOrder = MetadataSourceProcessingOrder.HBM_FIRST; | |
- private NamingStrategy namingStrategy = EJB3NamingStrategy.INSTANCE; | |
+ private ImplicitNamingStrategy implicitNamingStrategy = ImplicitNamingStrategyStandardImpl.INSTANCE; | |
+ private PhysicalNamingStrategy physicalNamingStrategy = PhysicalNamingStrategyStandardImpl.INSTANCE; | |
+ | |
private SharedCacheMode sharedCacheMode = SharedCacheMode.ENABLE_SELECTIVE; | |
private AccessType defaultCacheAccessType; | |
private boolean useNewIdentifierGenerators; | |
@@ -160,7 +168,33 @@ public class MetadataBuilderImpl implements MetadataBuilder { | |
@Override | |
public NamingStrategy getNamingStrategy() { | |
- return namingStrategy; | |
+ if ( implicitNamingStrategy == null ) { | |
+ return null; | |
+ } | |
+ | |
+ if ( ImplicitNamingStrategyDelegatingImpl.class.isInstance( implicitNamingStrategy ) ) { | |
+ return ( (ImplicitNamingStrategyDelegatingImpl) implicitNamingStrategy ).getNamingStrategy(); | |
+ } | |
+ | |
+ return null; | |
+ } | |
+ | |
+ public void setNamingStrategy(NamingStrategy namingStrategy) { | |
+ this.implicitNamingStrategy = new ImplicitNamingStrategyDelegatingImpl( namingStrategy ); | |
+ this.physicalNamingStrategy = new PhysicalNamingStrategyDelegatingImpl( namingStrategy ); | |
+ } | |
+ | |
+ | |
+ @Override | |
+ public ImplicitNamingStrategy getImplicitNamingStrategy() { | |
+ return implicitNamingStrategy; | |
+ } | |
+ | |
+ | |
+ | |
+ @Override | |
+ public PhysicalNamingStrategy getPhysicalNamingStrategy() { | |
+ return physicalNamingStrategy; | |
} | |
@Override | |
diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/MetadataImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/MetadataImpl.java | |
index 758c6ab..36d4fee 100644 | |
--- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/MetadataImpl.java | |
+++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/MetadataImpl.java | |
@@ -38,6 +38,8 @@ import org.hibernate.SessionFactory; | |
import org.hibernate.cache.spi.RegionFactory; | |
import org.hibernate.cache.spi.access.AccessType; | |
import org.hibernate.cfg.NamingStrategy; | |
+import org.hibernate.cfg.naming.ImplicitNamingStrategy; | |
+import org.hibernate.cfg.naming.PhysicalNamingStrategy; | |
import org.hibernate.engine.ResultSetMappingDefinition; | |
import org.hibernate.engine.spi.FilterDefinition; | |
import org.hibernate.engine.spi.NamedQueryDefinition; | |
@@ -466,7 +468,17 @@ public class MetadataImpl implements MetadataImplementor, Serializable { | |
return options.getNamingStrategy(); | |
} | |
- @Override | |
+ @Override | |
+ public ImplicitNamingStrategy getImplicitNamingStrategy() { | |
+ return options.getImplicitNamingStrategy(); | |
+ } | |
+ | |
+ @Override | |
+ public PhysicalNamingStrategy getPhysicalNamingStrategy() { | |
+ return options.getPhysicalNamingStrategy(); | |
+ } | |
+ | |
+ @Override | |
public boolean isGloballyQuotedIdentifiers() { | |
return globallyQuotedIdentifiers || getOptions().isGloballyQuotedIdentifiers(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment