/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.boot.model.naming;
import org.hibernate.dialect.Dialect;
Implementation of the ImplicitNamingStrategy contract which conforms to the
naming rules initially implemented by Hibernate for JPA 1.0, prior to many
things being clarified.
For a more JPA 2 compliant strategy, see/use ImplicitNamingStrategyJpaCompliantImpl
Corresponds roughly to the legacy org.hibernate.cfg.EJB3NamingStrategy class.
Author: Steve Ebersole
/**
* Implementation of the ImplicitNamingStrategy contract which conforms to the
* naming rules initially implemented by Hibernate for JPA 1.0, prior to many
* things being clarified.
* <p/>
* For a more JPA 2 compliant strategy, see/use {@link ImplicitNamingStrategyJpaCompliantImpl}
* <p/>
* Corresponds roughly to the legacy org.hibernate.cfg.EJB3NamingStrategy class.
*
* @author Steve Ebersole
*/
public class ImplicitNamingStrategyLegacyJpaImpl extends ImplicitNamingStrategyJpaCompliantImpl {
Singleton access
/**
* Singleton access
*/
public static final ImplicitNamingStrategyLegacyJpaImpl INSTANCE = new ImplicitNamingStrategyLegacyJpaImpl();
@Override
public Identifier determineCollectionTableName(ImplicitCollectionTableNameSource source) {
Identifier identifier = toIdentifier(
source.getOwningPhysicalTableName().getText() + "_" + transformAttributePath( source.getOwningAttributePath() ),
source.getBuildingContext()
);
if ( source.getOwningPhysicalTableName().isQuoted() ) {
identifier = Identifier.quote( identifier );
}
return identifier;
}
@Override
public Identifier determineJoinTableName(ImplicitJoinTableNameSource source) {
final String ownerPortion = source.getOwningPhysicalTableName();
final String ownedPortion;
if ( source.getNonOwningPhysicalTableName() != null ) {
ownedPortion = source.getNonOwningPhysicalTableName();
}
else {
ownedPortion = transformAttributePath( source.getAssociationOwningAttributePath() );
}
return toIdentifier( ownerPortion + "_" + ownedPortion, source.getBuildingContext() );
}
@Override
public Identifier determineJoinColumnName(ImplicitJoinColumnNameSource source) {
// legacy JPA-based naming strategy preferred to use {TableName}_{ReferencedColumnName}
// where JPA was later clarified to prefer {EntityName}_{ReferencedColumnName}.
//
// The spec-compliant one implements the clarified {EntityName}_{ReferencedColumnName}
// naming. Here we implement the older {TableName}_{ReferencedColumnName} naming
final String name;
// if ( source.getNature() == ImplicitJoinColumnNameSource.Nature.ENTITY
// && source.getAttributePath() != null ) {
// // many-to-one / one-to-one
// //
// // legacy naming used the attribute name here, following suit with legacy hbm naming
// //
// // NOTE : attribute path being null here would be an error, so for now don't bother checking
// name = transformAttributePath( source.getAttributePath() );
// }
// else if ( source.getNature() == ImplicitJoinColumnNameSource.Nature.ELEMENT_COLLECTION
if ( source.getNature() == ImplicitJoinColumnNameSource.Nature.ELEMENT_COLLECTION
|| source.getAttributePath() == null ) {
name = source.getReferencedTableName().getText()
+ '_'
+ source.getReferencedColumnName().getText();
}
else {
name = transformAttributePath( source.getAttributePath() )
+ '_'
+ source.getReferencedColumnName().getText();
}
return toIdentifier( name, source.getBuildingContext() );
}
}