HHH-7877 : Add support for multiple entity names used with the same Java class

This commit is contained in:
Gail Badner 2012-12-18 17:22:56 -08:00
parent 0c6ab56372
commit 2bee7d5111
16 changed files with 33 additions and 36 deletions

View File

@ -101,7 +101,7 @@ public class MetamodelBuilder {
}
private EntityTypeImpl locateOrBuildEntityType(EntityBinding binding) {
EntityTypeImpl entityType = entityTypeMap.get( binding.getClassReference() );
EntityTypeImpl entityType = entityTypeByNameMap.get( binding.getEntityName() );
if ( entityType == null ) {
entityType = buildEntityType( binding );
}
@ -122,6 +122,7 @@ public class MetamodelBuilder {
);
entityTypeMap.put( javaType, entityType );
entityTypeByNameMap.put( entityBinding.getEntityName(), entityType );
return entityType;
}
@ -235,7 +236,7 @@ public class MetamodelBuilder {
processSuperType( descriptor, entityBinding );
final AbstractIdentifiableType jpaDescriptor = Entity.class.isInstance( descriptor )
? entityTypeMap.get( descriptor.getClassReference() )
? entityTypeByNameMap.get( descriptor.getName() )
: mappedSuperclassTypeMap.get( descriptor.getClassReference() );
applyIdMetadata( descriptor, entityBinding.getHierarchyDetails(), jpaDescriptor );

View File

@ -2885,10 +2885,14 @@ public class Binder {
}
private EntityBinding findOrBindEntityBinding(ValueHolder< Class< ? >> entityJavaTypeValue, String explicitEntityName) {
// final String referencedEntityName =
// bindingContext().qualifyClassName( explicitEntityName != null
// ? explicitEntityName
// : entityJavaTypeValue.getValue().getName() );
final String referencedEntityName =
bindingContext().qualifyClassName( explicitEntityName != null
explicitEntityName != null
? explicitEntityName
: entityJavaTypeValue.getValue().getName() );
: entityJavaTypeValue.getValue().getName();
return findOrBindEntityBinding( referencedEntityName );
}

View File

@ -73,6 +73,7 @@ public abstract class AbstractEntitySourceImpl
private final EntityElement entityElement;
private final String className;
private final String entityName;
private final String jpaEntityName;
private List<SubclassEntitySource> subclassEntitySources = new ArrayList<SubclassEntitySource>();
@ -87,9 +88,14 @@ public abstract class AbstractEntitySourceImpl
this.entityElement = entityElement;
this.className = bindingContext().qualifyClassName( entityElement.getName() );
this.entityName = StringHelper.isNotEmpty( entityElement.getEntityName() )
? entityElement.getEntityName()
: className;
if ( StringHelper.isNotEmpty( entityElement.getEntityName() ) ) {
this.entityName = entityElement.getEntityName();
this.jpaEntityName = entityElement.getEntityName();
}
else {
this.entityName = className;
this.jpaEntityName = StringHelper.unqualify( className );
}
}
@Override
@ -375,7 +381,7 @@ public abstract class AbstractEntitySourceImpl
@Override
public String getJpaEntityName() {
return null;
return jpaEntityName;
}
@Override

View File

@ -164,7 +164,7 @@ class ManyToOneAttributeSourceImpl extends AbstractToOneAttributeSourceImpl {
@Override
public String getReferencedEntityName() {
return manyToOneElement.getClazz() != null
? manyToOneElement.getClazz()
? bindingContext().qualifyClassName( manyToOneElement.getClazz() )
: manyToOneElement.getEntityName();
}

View File

@ -171,7 +171,7 @@ class OneToOneAttributeSourceImpl extends AbstractToOneAttributeSourceImpl {
@Override
public String getReferencedEntityName() {
return oneToOneElement.getClazz() != null
? oneToOneElement.getClazz()
? bindingContext().qualifyClassName( oneToOneElement.getClazz() )
: oneToOneElement.getEntityName();
}

View File

@ -294,6 +294,7 @@ public class EntityIdentifier {
}
params.setProperty( IdentifierGenerator.ENTITY_NAME, entityBinding.getEntity().getName() );
params.setProperty( IdentifierGenerator.JPA_ENTITY_NAME, entityBinding.getJpaEntityName() );
//init the table here instead of earlier, so that we can get a quoted table name
//TODO: would it be better to simply pass the qualified table name, instead of

View File

@ -25,9 +25,10 @@ package org.hibernate.metamodel.spi.relational;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.AssertionFailure;
import org.hibernate.dialect.Dialect;
/**
@ -41,7 +42,7 @@ import org.hibernate.dialect.Dialect;
public abstract class AbstractConstraint implements Constraint {
private final TableSpecification table;
private String name;
private List<Column> columns = new ArrayList<Column>();
private final Map<Identifier, Column> columnMap = new LinkedHashMap<Identifier, Column>();
protected AbstractConstraint(TableSpecification table, String name) {
this.table = table;
@ -108,19 +109,19 @@ public abstract class AbstractConstraint implements Constraint {
}
protected int generateConstraintColumnListId() {
return table.generateColumnListId( columns );
return table.generateColumnListId( getColumns() );
}
public List<Column> getColumns() {
return Collections.unmodifiableList( columns );
return Collections.unmodifiableList( new ArrayList<Column>( columnMap.values() ) );
}
public int getColumnSpan() {
return columns.size();
return columnMap.size();
}
protected List<Column> internalColumnAccess() {
return columns;
protected Map<Identifier, Column> internalColumnAccess() {
return columnMap;
}
public void addColumn(Column column) {
@ -137,7 +138,7 @@ public abstract class AbstractConstraint implements Constraint {
// )
// );
// }
columns.add( column );
columnMap.put( column.getColumnName(), column );
}
protected boolean isCreationVetoed(Dialect dialect) {

View File

@ -95,12 +95,7 @@ public class AssertSourcesTest extends BaseUnitTestCase {
assertEquals( User.class.getName(), entitySource.getClassName() );
assertEquals( User.class.getName(), entitySource.getEntityName() );
if ( HbmMetadataSourceProcessorImpl.class.isInstance( processor ) ) {
assertNull( entitySource.getJpaEntityName() );
}
else {
assertEquals( StringHelper.unqualify( User.class.getName() ), entitySource.getJpaEntityName() );
}
assertEquals( EntityMode.POJO, entitySource.getEntityMode() );
assertNull( entitySource.getCaching() );

View File

@ -33,7 +33,6 @@ import org.hibernate.id.enhanced.SequenceStyleGenerator;
import org.hibernate.id.enhanced.TableGenerator;
import org.hibernate.internal.util.StringHelper;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
@ -133,7 +132,6 @@ public class NewGeneratorMappingsTest extends BaseCoreFunctionalTestCase {
@Test
@TestForIssue(jiraKey = "HHH-6790")
@FailureExpectedWithNewMetamodel
public void testSequencePerEntity() {
// Checking first entity.
EntityPersister persister = sessionFactory().getEntityPersister( DedicatedSequenceEntity1.class.getName() );

View File

@ -50,7 +50,6 @@ import org.hibernate.test.annotations.id.sequences.entities.Store;
import org.hibernate.test.annotations.id.sequences.entities.Tree;
import org.hibernate.test.util.SchemaUtil;
import org.hibernate.testing.DialectChecks;
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.RequiresDialectFeature;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
@ -298,7 +297,6 @@ public class IdTest extends BaseCoreFunctionalTestCase {
@Test
@TestForIssue(jiraKey = "HHH-6790")
@FailureExpectedWithNewMetamodel
public void testSequencePerEntity() {
Session session = openSession();
session.beginTransaction();

View File

@ -33,7 +33,6 @@ import org.hibernate.testing.FailureExpectedWithNewMetamodel;
*
* @author Gail Badner
*/
//@FailureExpectedWithNewMetamodel
public class BidirectionalManyToManySetToSetCollectionEventTest extends AbstractAssociationCollectionEventTest {
@Override
public String[] getMappings() {

View File

@ -36,7 +36,6 @@ import org.hibernate.testing.FailureExpectedWithNewMetamodel;
/**
* @author Gail Badner
*/
//@FailureExpectedWithNewMetamodel
public class UnidirectionalManyToManyBagCollectionEventTest extends AbstractAssociationCollectionEventTest {
@Override
public String[] getMappings() {

View File

@ -40,7 +40,6 @@ import static org.junit.Assert.assertEquals;
* @author Steve Ebersole
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
*/
@FailureExpectedWithNewMetamodel
public class BasicSequenceTest extends BaseCoreFunctionalTestCase {
@Override
public String[] getMappings() {

View File

@ -32,7 +32,6 @@ import org.hibernate.StaleObjectStateException;
import org.hibernate.StaleStateException;
import org.hibernate.dialect.SQLServerDialect;
import org.hibernate.testing.DialectChecks;
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.RequiresDialectFeature;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
@ -48,7 +47,6 @@ import static org.junit.Assert.fail;
value = DialectChecks.DoesRepeatableReadNotCauseReadersToBlockWritersCheck.class,
comment = "potential deadlock"
)
@FailureExpectedWithNewMetamodel
public class OptimisticLockTest extends BaseCoreFunctionalTestCase {
@Override
public String[] getMappings() {

View File

@ -41,7 +41,6 @@ import static org.junit.Assert.assertTrue;
/**
* @author Gavin King
*/
@FailureExpectedWithNewMetamodel
public class TypedManyToOneTest extends BaseCoreFunctionalTestCase {
@Override
public String[] getMappings() {
@ -49,6 +48,7 @@ public class TypedManyToOneTest extends BaseCoreFunctionalTestCase {
}
@Test
@FailureExpectedWithNewMetamodel
public void testCreateQuery() {
Customer cust = new Customer();
cust.setCustomerId("abc123");

View File

@ -30,7 +30,6 @@ import org.junit.Test;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import static org.junit.Assert.assertEquals;
@ -40,7 +39,6 @@ import static org.junit.Assert.assertTrue;
/**
* @author Gavin King
*/
@FailureExpectedWithNewMetamodel
public class TypedOneToOneTest extends BaseCoreFunctionalTestCase {
@Override
public String[] getMappings() {