Skip to content

Instantly share code, notes, and snippets.

@gbadner
Created September 23, 2014 21:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gbadner/1bceb7eb2eab59f7fcdf to your computer and use it in GitHub Desktop.
Save gbadner/1bceb7eb2eab59f7fcdf to your computer and use it in GitHub Desktop.
Latest diff
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