diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/annotations/EntityBinder.java b/hibernate-core/src/main/java/org/hibernate/cfg/annotations/EntityBinder.java index eca4a64e24..b229c0042a 100644 --- a/hibernate-core/src/main/java/org/hibernate/cfg/annotations/EntityBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/cfg/annotations/EntityBinder.java @@ -393,8 +393,8 @@ public void bindEntity() { } LOG.debugf( "Import with entity name %s", name ); try { - mappings.addImport( persistentClass.getEntityName(), name ); - String entityName = persistentClass.getEntityName(); + final String entityName = persistentClass.getEntityName(); + mappings.addImport( entityName, name ); if ( !entityName.equals( name ) ) { mappings.addImport( entityName, entityName ); } diff --git a/hibernate-core/src/main/java/org/hibernate/internal/SessionFactoryImpl.java b/hibernate-core/src/main/java/org/hibernate/internal/SessionFactoryImpl.java index 6b49e07376..3947990016 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/SessionFactoryImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/SessionFactoryImpl.java @@ -923,10 +923,7 @@ public void sessionFactoryClosed(SessionFactory factory) { namedSqlQueries.put( namedNativeQueryDefinition.getName(), namedNativeQueryDefinition ); } sqlResultSetMappings = Collections.unmodifiableMap( new HashMap( metadata.getResultSetMappingDefinitions() ) ); - imports = new HashMap(); - for ( Map.Entry importEntry : metadata.getImports() ) { - imports.put( importEntry.getKey(), importEntry.getValue() ); - } + imports = new HashMap(metadata.getImports()); // after *all* persisters and named queries are registered Iterator iter = entityPersisters.values().iterator(); 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 23d9910b5a..58216c529f 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/Metadata.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/Metadata.java @@ -109,7 +109,7 @@ public static interface Options { public Map getResultSetMappingDefinitions(); - public Iterable> getImports(); + public Map getImports(); public Iterable getFetchProfiles(); diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/MetadataImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/MetadataImpl.java index c9fcfce384..47cd8b2b37 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/MetadataImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/MetadataImpl.java @@ -556,7 +556,7 @@ public void addCollection(PluralAttributeBinding pluralAttributeBinding) { } collectionBindingMap.put( collectionRole, pluralAttributeBinding ); } - + @Override public void addImport(String importName, String entityName) { if ( importName == null || entityName == null ) { throw new IllegalArgumentException( "Import name or entity name is null" ); @@ -569,8 +569,8 @@ public void addImport(String importName, String entityName) { } @Override - public Iterable> getImports() { - return imports.entrySet(); + public Map getImports() { + return imports; } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/entity/EntitySourceImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/entity/EntitySourceImpl.java index 4933bfd3bf..cc652a7edc 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/entity/EntitySourceImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/entity/EntitySourceImpl.java @@ -29,8 +29,11 @@ import java.util.List; import java.util.Set; +import org.hibernate.AnnotationException; +import org.hibernate.MappingException; import org.hibernate.cfg.NotYetImplementedException; import org.hibernate.internal.jaxb.Origin; +import org.hibernate.internal.util.StringHelper; import org.hibernate.metamodel.internal.source.annotations.attribute.AssociationAttribute; import org.hibernate.metamodel.internal.source.annotations.attribute.BasicAttribute; import org.hibernate.metamodel.internal.source.annotations.attribute.PluralAssociationAttribute; @@ -44,6 +47,7 @@ import org.hibernate.metamodel.spi.source.JpaCallbackSource; import org.hibernate.metamodel.spi.source.LocalBindingContext; import org.hibernate.metamodel.spi.source.MetaAttributeSource; +import org.hibernate.metamodel.spi.source.MetadataImplementor; import org.hibernate.metamodel.spi.source.SecondaryTableSource; import org.hibernate.metamodel.spi.source.SubclassEntitySource; import org.hibernate.metamodel.spi.source.TableSpecificationSource; @@ -54,10 +58,28 @@ public class EntitySourceImpl implements EntitySource { private final EntityClass entityClass; private final Set subclassEntitySources; + private final String jpaEntityName; public EntitySourceImpl(EntityClass entityClass) { this.entityClass = entityClass; this.subclassEntitySources = new HashSet(); + this.jpaEntityName = StringHelper.isNotEmpty( entityClass.getExplicitEntityName() ) ? entityClass.getExplicitEntityName() : StringHelper + .unqualify( entityClass.getName() ); + addImports(); + } + + private void addImports() { + try { + final MetadataImplementor metadataImplementor = entityClass.getLocalBindingContext() + .getMetadataImplementor(); + metadataImplementor.addImport( getJpaEntityName(), getEntityName() ); + if ( !getEntityName().equals( getJpaEntityName() ) ) { + metadataImplementor.addImport( getEntityName(), getEntityName() ); + } + } + catch ( MappingException e ) { + throw new AnnotationException( "Use of the same entity name twice: " + getJpaEntityName(), e ); + } } public EntityClass getEntityClass() { @@ -76,7 +98,7 @@ public LocalBindingContext getLocalBindingContext() { @Override public String getEntityName() { - return entityClass.getName(); + return getClassName(); } @Override @@ -86,7 +108,7 @@ public String getClassName() { @Override public String getJpaEntityName() { - return entityClass.getExplicitEntityName(); + return jpaEntityName; } @Override diff --git a/hibernate-core/src/test/java/org/hibernate/test/cache/InsertedDataTest.java b/hibernate-core/src/test/java/org/hibernate/test/cache/InsertedDataTest.java index 4145c2fe27..a3ab1fb36b 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/cache/InsertedDataTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/cache/InsertedDataTest.java @@ -30,6 +30,7 @@ import org.hibernate.Session; import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Environment; +import org.hibernate.service.ServiceRegistryBuilder; import org.hibernate.testing.FailureExpectedWithNewMetamodel; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; @@ -57,8 +58,13 @@ protected void configure(Configuration cfg) { cfg.setProperty( Environment.GENERATE_STATISTICS, "true" ); } + @Override + protected void prepareBasicRegistryBuilder(ServiceRegistryBuilder serviceRegistryBuilder) { + serviceRegistryBuilder.applySetting( Environment.CACHE_REGION_PREFIX, "" ); + serviceRegistryBuilder.applySetting( Environment.GENERATE_STATISTICS, "true" ); + } + @Test - @FailureExpectedWithNewMetamodel public void testInsert() { sessionFactory().getCache().evictEntityRegions(); sessionFactory().getStatistics().clear(); @@ -98,7 +104,6 @@ public void testInsertWithRollback() { } @Test - @FailureExpectedWithNewMetamodel public void testInsertThenUpdate() { sessionFactory().getCache().evictEntityRegions(); sessionFactory().getStatistics().clear(); @@ -123,7 +128,6 @@ public void testInsertThenUpdate() { } @Test - @FailureExpectedWithNewMetamodel public void testInsertThenUpdateThenRollback() { sessionFactory().getCache().evictEntityRegions(); sessionFactory().getStatistics().clear(); @@ -148,7 +152,6 @@ public void testInsertThenUpdateThenRollback() { } @Test - @FailureExpectedWithNewMetamodel public void testInsertWithRefresh() { sessionFactory().getCache().evictEntityRegions(); sessionFactory().getStatistics().clear(); @@ -199,7 +202,6 @@ public void testInsertWithRefreshThenRollback() { } @Test - @FailureExpectedWithNewMetamodel public void testInsertWithClear() { sessionFactory().getCache().evictEntityRegions(); sessionFactory().getStatistics().clear();