diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/binding/EntityIdentifier.java b/hibernate-core/src/main/java/org/hibernate/metamodel/binding/EntityIdentifier.java index aedde836a3..8100e64bd5 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/binding/EntityIdentifier.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/binding/EntityIdentifier.java @@ -25,24 +25,17 @@ package org.hibernate.metamodel.binding; import java.util.Properties; -import org.jboss.logging.Logger; - +import org.hibernate.AssertionFailure; import org.hibernate.id.IdentifierGenerator; import org.hibernate.id.factory.IdentifierGeneratorFactory; -import org.hibernate.internal.CoreMessageLogger; /** * Binds the entity identifier. * * @author Steve Ebersole + * @author Hardy Ferentschik */ public class EntityIdentifier { - - private static final CoreMessageLogger LOG = Logger.getMessageLogger( - CoreMessageLogger.class, - EntityIdentifier.class.getName() - ); - private final EntityBinding entityBinding; private SimpleSingularAttributeBinding attributeBinding; private IdentifierGenerator identifierGenerator; @@ -65,9 +58,12 @@ public class EntityIdentifier { public void setValueBinding(SimpleSingularAttributeBinding attributeBinding) { if ( this.attributeBinding != null ) { - // todo : error? or just log? For now throw exception and see what happens. Easier to see whether this - // method gets called multiple times - LOG.entityIdentifierValueBindingExists( entityBinding.getEntity().getName() ); + throw new AssertionFailure( + String.format( + "Identifier value binding already existed for %s", + entityBinding.getEntity().getName() + ) + ); } this.attributeBinding = attributeBinding; } @@ -77,13 +73,15 @@ public class EntityIdentifier { } public boolean isEmbedded() { - return attributeBinding.getSimpleValueSpan()>1; + return attributeBinding.getSimpleValueSpan() > 1; } public boolean isIdentifierMapper() { return isIdentifierMapper; } + // todo do we really need this createIdentifierGenerator and how do we make sure the getter is not called too early + // maybe some sort of visitor pattern here!? (HF) public IdentifierGenerator createIdentifierGenerator(IdentifierGeneratorFactory factory, Properties properties) { if ( idGenerator != null ) { identifierGenerator = attributeBinding.createIdentifierGenerator( idGenerator, factory, properties ); diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/binding/SimpleSingularAttributeBinding.java b/hibernate-core/src/main/java/org/hibernate/metamodel/binding/SimpleSingularAttributeBinding.java index c1d12ac9c1..554a696170 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/binding/SimpleSingularAttributeBinding.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/binding/SimpleSingularAttributeBinding.java @@ -121,7 +121,6 @@ public class SimpleSingularAttributeBinding this.metaAttributeContext = metaAttributeContext; } - /* package-protected */ IdentifierGenerator createIdentifierGenerator( IdGenerator idGenerator, IdentifierGeneratorFactory identifierGeneratorFactory, @@ -138,14 +137,14 @@ public class SimpleSingularAttributeBinding params.setProperty( PersistentIdentifierGenerator.SCHEMA, schema.getName().getSchema().getName() ); } if ( schema.getName().getCatalog() != null ) { - params.setProperty(PersistentIdentifierGenerator.CATALOG, schema.getName().getCatalog().getName() ); + params.setProperty( PersistentIdentifierGenerator.CATALOG, schema.getName().getCatalog().getName() ); } } // TODO: not sure how this works for collection IDs... //pass the entity-name, if not a collection-id //if ( rootClass!=null) { - params.setProperty( IdentifierGenerator.ENTITY_NAME, getEntityBinding().getEntity().getName() ); + params.setProperty( IdentifierGenerator.ENTITY_NAME, getEntityBinding().getEntity().getName() ); //} //init the table here instead of earlier, so that we can get a quoted table name @@ -156,10 +155,12 @@ public class SimpleSingularAttributeBinding //pass the column name (a generated id almost always has a single column) if ( getSimpleValueSpan() > 1 ) { - throw new MappingException( "A SimpleAttributeBinding used for an identifier has a more than 1 Value: " + getAttribute().getName() ); + throw new MappingException( + "A SimpleAttributeBinding used for an identifier has more than 1 Value: " + getAttribute().getName() + ); } SimpleValue simpleValue = (SimpleValue) getValue(); - if ( ! Column.class.isInstance( simpleValue ) ) { + if ( !Column.class.isInstance( simpleValue ) ) { throw new MappingException( "Cannot create an IdentifierGenerator because the value is not a column: " + simpleValue.toLoggableString() @@ -167,7 +168,7 @@ public class SimpleSingularAttributeBinding } params.setProperty( PersistentIdentifierGenerator.PK, - ( ( Column ) simpleValue ).getColumnName().encloseInQuotesIfQuoted( + ( (Column) simpleValue ).getColumnName().encloseInQuotesIfQuoted( identifierGeneratorFactory.getDialect() ) ); @@ -184,7 +185,7 @@ public class SimpleSingularAttributeBinding // params.setProperty( PersistentIdentifierGenerator.TABLES, tables.toString() ); //} //else { - params.setProperty( PersistentIdentifierGenerator.TABLES, tableName ); + params.setProperty( PersistentIdentifierGenerator.TABLES, tableName ); //} params.putAll( idGenerator.getParameters() ); diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/TypeEnumConversionHelper.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/TypeEnumConversionHelper.java new file mode 100644 index 0000000000..c89857dc70 --- /dev/null +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/TypeEnumConversionHelper.java @@ -0,0 +1,12 @@ +package org.hibernate.metamodel.source.annotations; + +/** + * @author Hardy Ferentschik + */ +public class TypeEnumConversionHelper { + private TypeEnumConversionHelper() { + + } +} + + diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/entity/RootEntitySourceImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/entity/RootEntitySourceImpl.java index 9e7be5f9bf..f11a1ab020 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/entity/RootEntitySourceImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/annotations/entity/RootEntitySourceImpl.java @@ -27,8 +27,8 @@ import org.hibernate.AssertionFailure; import org.hibernate.EntityMode; import org.hibernate.engine.OptimisticLockStyle; import org.hibernate.metamodel.binding.Caching; -import org.hibernate.metamodel.source.annotations.attribute.DiscriminatorSourceImpl; import org.hibernate.metamodel.source.annotations.attribute.BasicAttribute; +import org.hibernate.metamodel.source.annotations.attribute.DiscriminatorSourceImpl; import org.hibernate.metamodel.source.annotations.attribute.SimpleIdentifierSourceImpl; import org.hibernate.metamodel.source.annotations.attribute.SingularAttributeSourceImpl; import org.hibernate.metamodel.source.binder.DiscriminatorSource; diff --git a/hibernate-core/src/test/java/org/hibernate/metamodel/source/annotations/entity/IdentifierGeneratorTest.java b/hibernate-core/src/test/java/org/hibernate/metamodel/source/annotations/entity/IdentifierGeneratorTest.java new file mode 100644 index 0000000000..bdbf362051 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/metamodel/source/annotations/entity/IdentifierGeneratorTest.java @@ -0,0 +1,63 @@ +package org.hibernate.metamodel.source.annotations.entity; + +import java.util.Iterator; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.SecondaryTable; + +import org.junit.Test; + +import org.hibernate.AssertionFailure; +import org.hibernate.metamodel.binding.EntityBinding; +import org.hibernate.metamodel.relational.SimpleValue; +import org.hibernate.metamodel.relational.Table; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; +import static junit.framework.Assert.fail; + +/** + * @author Hardy Ferentschik + */ +public class IdentifierGeneratorTest extends BaseAnnotationBindingTestCase { + @Entity + @SecondaryTable(name = "SECOND_TABLE") + class EntityWithSecondaryTable { + @Id + private long id; + + @Column(table = "SECOND_TABLE") + private String name; + } + + @Test + @Resources(annotatedClasses = EntityWithSecondaryTable.class) + public void testSecondaryTableExists() { + EntityBinding binding = getEntityBinding( EntityWithSecondaryTable.class ); + Table table = (Table) binding.getTable( "SECOND_TABLE" ); + assertEquals( "The secondary table should exist", "SECOND_TABLE", table.getTableName().getName() ); + + Iterator valueIterator = table.values().iterator(); + assertTrue( valueIterator.hasNext() ); + org.hibernate.metamodel.relational.Column column = (org.hibernate.metamodel.relational.Column) valueIterator.next(); + assertEquals( "Wrong column name", "name", column.getColumnName().getName() ); + assertFalse( valueIterator.hasNext() ); + } + + @Test + @Resources(annotatedClasses = EntityWithSecondaryTable.class) + public void testRetrievingUnknownTable() { + EntityBinding binding = getEntityBinding( EntityWithSecondaryTable.class ); + try { + binding.getTable( "FOO" ); + fail(); + } + catch ( AssertionFailure e ) { + assertTrue( e.getMessage().startsWith( "Unable to find table" ) ); + } + } +} + +