HHH-7756 Disconnect between annotation and hbm entity names

This commit is contained in:
brmeyer 2012-11-05 17:31:11 -05:00
parent 3db62f5e76
commit 8f93b41da7
6 changed files with 29 additions and 18 deletions

View File

@ -32,21 +32,21 @@
public class EntityTypeImpl<X>
extends AbstractIdentifiableType<X>
implements EntityType<X>, Serializable {
private final String jpaEntityName;
private final String entityName;
public EntityTypeImpl(
Class<X> javaType,
AbstractIdentifiableType<? super X> superType,
String jpaEntityName,
String entityName,
boolean hasIdentifierProperty,
boolean isVersioned) {
super( javaType, superType, hasIdentifierProperty, isVersioned );
this.jpaEntityName = jpaEntityName;
this.entityName = entityName;
}
@Override
public String getName() {
return jpaEntityName;
return entityName;
}
@Override

View File

@ -27,14 +27,15 @@
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import javax.persistence.OneToOne;
import javax.persistence.metamodel.Attribute;
import javax.persistence.metamodel.Attribute.PersistentAttributeType;
import javax.persistence.metamodel.EntityType;
import javax.persistence.metamodel.IdentifiableType;
import javax.persistence.metamodel.PluralAttribute;
import javax.persistence.metamodel.Type;
import org.jboss.logging.Logger;
import org.hibernate.annotations.common.AssertionFailure;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.jpa.metamodel.internal.AbstractIdentifiableType;
@ -56,9 +57,7 @@
import org.hibernate.tuple.entity.EntityMetamodel;
import org.hibernate.type.ComponentType;
import org.hibernate.type.EmbeddedComponentType;
import org.hibernate.type.EntityType;
import static javax.persistence.metamodel.Attribute.PersistentAttributeType;
import org.jboss.logging.Logger;
/**
* A factory for building {@link Attribute} instances. Exposes 3 main services:<ol>
@ -229,7 +228,7 @@ private <Y> Type<Y> getMetaModelType(AttributeTypeDescriptor attributeTypeDescri
);
}
case ENTITY: {
final org.hibernate.type.EntityType type = (EntityType) attributeTypeDescriptor.getHibernateType();
final org.hibernate.type.EntityType type = (org.hibernate.type.EntityType) attributeTypeDescriptor.getHibernateType();
return (Type<Y>) context.locateEntityTypeByName( type.getAssociatedEntityName() );
}
case EMBEDDABLE: {
@ -261,9 +260,14 @@ private <Y> Type<Y> getMetaModelType(AttributeTypeDescriptor attributeTypeDescri
private EntityMetamodel getDeclarerEntityMetamodel(IdentifiableType<?> ownerType) {
final Type.PersistenceType persistenceType = ownerType.getPersistenceType();
if ( persistenceType == Type.PersistenceType.ENTITY) {
String entityName;
if ( ownerType instanceof EntityType<?> ) {
entityName = ( ( EntityType<?> ) ownerType ).getName();
} else {
entityName = ownerType.getJavaType().getName();
}
return context.getSessionFactory()
.getEntityPersister( ownerType.getJavaType().getName() )
.getEntityMetamodel();
.getEntityPersister( entityName ).getEntityMetamodel();
}
else if ( persistenceType == Type.PersistenceType.MAPPED_SUPERCLASS) {
return context.getSubClassEntityPersister( (MappedSuperclassTypeImpl) ownerType ).getEntityMetamodel();

View File

@ -113,7 +113,7 @@ private EntityTypeImpl buildEntityType(EntityBinding entityBinding) {
EntityTypeImpl entityType = new EntityTypeImpl(
javaType,
superType,
entityBinding.getJpaEntityName(),
entityBinding.getEntityName(),
entityBinding.getHierarchyDetails().getEntityIdentifier().getAttributeBinding() != null,
entityBinding.isVersioned()
);

View File

@ -1816,6 +1816,7 @@ private EntityBinding createEntityBinding( final EntitySource entitySource, fina
entityClassName,
bindingContext.makeClassReference( entityClassName ),
superEntityBinding == null ? null : superEntityBinding.getEntity() ) );
entityBinding.setEntityName( entitySource.getEntityName() );
entityBinding.setJpaEntityName( entitySource.getJpaEntityName() ); //must before creating primary table
entityBinding.setDynamicUpdate( entitySource.isDynamicUpdate() );
entityBinding.setDynamicInsert( entitySource.isDynamicInsert() );

View File

@ -69,6 +69,7 @@ public class EntityBinding implements MutableAttributeBindingContainer {
private ValueHolder<Class<?>> proxyInterfaceType;
private String entityName;
private String jpaEntityName;
private Class<? extends EntityPersister> customEntityPersisterClass;
@ -433,6 +434,14 @@ public void addSynchronizedTableNames(java.util.Collection<String> synchronizedT
this.synchronizedTableNames.addAll( synchronizedTableNames );
}
public String getEntityName() {
return entityName;
}
public void setEntityName(String entityName) {
this.entityName = entityName;
}
public String getJpaEntityName() {
return jpaEntityName;
}

View File

@ -22,18 +22,15 @@
* Boston, MA 02110-1301 USA
*/
package org.hibernate.test.entityname;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.hibernate.Session;
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
/**
* @author stliu
*/
@FailureExpectedWithNewMetamodel
public class EntityNameFromSubClassTest extends BaseCoreFunctionalTestCase {
@Override
public String[] getMappings() {