diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/Binder.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/Binder.java index bffd995410..a893716711 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/Binder.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/Binder.java @@ -2009,7 +2009,7 @@ private void bindCompositeCollectionElement( private void bindBasicCollectionIndex( final IndexedPluralAttributeBinding attributeBinding, - final BasicPluralAttributeIndexSource attributeSource, + final BasicPluralAttributeIndexSource indexSource, final String defaultIndexJavaTypeName) { final BasicPluralAttributeIndexBinding indexBinding = (BasicPluralAttributeIndexBinding) attributeBinding.getPluralAttributeIndexBinding(); @@ -2017,9 +2017,10 @@ private void bindBasicCollectionIndex( indexBinding.setRelationalValueBindings( bindValues( attributeBinding.getContainer(), - attributeSource, + indexSource, attributeBinding.getAttribute(), attributeBinding.getPluralAttributeKeyBinding().getCollectionTable(), + indexSource.getDefaultNamingStrategies(), attributeBinding.getPluralAttributeElementBinding() .getNature() != PluralAttributeElementBinding.Nature.ONE_TO_MANY ) @@ -2028,7 +2029,7 @@ private void bindBasicCollectionIndex( typeHelper.bindHibernateTypeDescriptor( indexBinding.getHibernateTypeDescriptor(), - attributeSource.explicitHibernateTypeSource(), + indexSource.explicitHibernateTypeSource(), defaultIndexJavaTypeName ); typeHelper.bindJdbcDataType( @@ -2908,13 +2909,25 @@ private List bindValues( } else { - final String name = defaultNamingStrategyList.get( 0 ).defaultName(); - for ( final RelationalValueSource valueSource : valueSourceContainer.relationalValueSources() ) { + for ( int i = 0 ; i < valueSourceContainer.relationalValueSources().size(); i++ ) { + final RelationalValueSource valueSource = valueSourceContainer.relationalValueSources().get( i ); final TableSpecification table = valueSource.getContainingTableName() == null ? defaultTable : attributeBindingContainer.seekEntityBinding() .locateTable( valueSource.getContainingTableName() ); + final String name; + if ( ColumnSource.class.isInstance( valueSource ) ) { + ColumnSource columnSource = (ColumnSource) valueSource; + // Use default if a name is not provided. + name = StringHelper.isNotEmpty( columnSource.getName() ) ? + columnSource.getName() : + defaultNamingStrategyList.get( i ).defaultName(); + } + else { + // name should be null for derived values. + name = null; + } if ( valueSource.getNature() == RelationalValueSource.Nature.COLUMN ) { final ColumnSource columnSource = (ColumnSource) valueSource; Column column = createColumn( diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/BasicPluralAttributeElementSourceImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/BasicPluralAttributeElementSourceImpl.java index 848c865266..f2407774b9 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/BasicPluralAttributeElementSourceImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/BasicPluralAttributeElementSourceImpl.java @@ -6,6 +6,7 @@ import org.hibernate.metamodel.internal.source.annotations.attribute.AssociationAttribute; import org.hibernate.metamodel.internal.source.annotations.attribute.Column; import org.hibernate.metamodel.internal.source.annotations.attribute.MappedAttribute; +import org.hibernate.metamodel.internal.source.annotations.attribute.PluralAssociationAttribute; import org.hibernate.metamodel.spi.source.BasicPluralAttributeElementSource; import org.hibernate.metamodel.spi.source.ExplicitHibernateTypeSource; import org.hibernate.metamodel.spi.source.RelationalValueSource; @@ -14,9 +15,9 @@ * @author Hardy Ferentschik */ public class BasicPluralAttributeElementSourceImpl implements BasicPluralAttributeElementSource { - private final AssociationAttribute associationAttribute; + private final PluralAssociationAttribute associationAttribute; - public BasicPluralAttributeElementSourceImpl(AssociationAttribute associationAttribute) { + public BasicPluralAttributeElementSourceImpl(PluralAssociationAttribute associationAttribute) { this.associationAttribute = associationAttribute; } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/BasicPluralAttributeIndexSourceImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/BasicPluralAttributeIndexSourceImpl.java index 612875f666..6383601957 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/BasicPluralAttributeIndexSourceImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/BasicPluralAttributeIndexSourceImpl.java @@ -24,11 +24,13 @@ package org.hibernate.metamodel.internal.source.annotations; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import org.jboss.jandex.AnnotationInstance; +import org.hibernate.metamodel.internal.Binder; import org.hibernate.metamodel.internal.source.annotations.attribute.Column; import org.hibernate.metamodel.internal.source.annotations.attribute.PluralAssociationAttribute; import org.hibernate.metamodel.internal.source.annotations.util.HibernateDotNames; @@ -46,7 +48,11 @@ public class BasicPluralAttributeIndexSourceImpl implements BasicPluralAttribute private final PluralAssociationAttribute attribute; private final IndexedPluralAttributeSourceImpl indexedPluralAttributeSource; private final List relationalValueSources = new ArrayList( 1 ); - public BasicPluralAttributeIndexSourceImpl(IndexedPluralAttributeSourceImpl indexedPluralAttributeSource, PluralAssociationAttribute attribute) { + private final Binder.DefaultNamingStrategy defaultNamingStrategy; + public BasicPluralAttributeIndexSourceImpl( + IndexedPluralAttributeSourceImpl indexedPluralAttributeSource, + PluralAssociationAttribute attribute, + Binder.DefaultNamingStrategy defaultNamingStrategy) { this.attribute = attribute; this.indexedPluralAttributeSource = indexedPluralAttributeSource; AnnotationInstance columnAnnotation = JandexHelper.getSingleAnnotation( @@ -59,9 +65,15 @@ public BasicPluralAttributeIndexSourceImpl(IndexedPluralAttributeSourceImpl inde JPADotNames.ORDER_COLUMN ); } + if ( columnAnnotation == null) { + columnAnnotation = JandexHelper.getSingleAnnotation( + attribute.annotations(), + JPADotNames.MAP_KEY_COLUMN + ); + } Column indexColumn = new Column( columnAnnotation ); relationalValueSources.add( new ColumnValuesSourceImpl( indexColumn ) ); - + this.defaultNamingStrategy = defaultNamingStrategy; } @Override @@ -69,6 +81,11 @@ public PluralAttributeIndexBinding.Nature getNature() { return PluralAttributeIndexBinding.Nature.BASIC; } + @Override + public List getDefaultNamingStrategies() { + return Collections.singletonList( defaultNamingStrategy ); + } + @Override public ExplicitHibernateTypeSource explicitHibernateTypeSource() { return new ExplicitHibernateTypeSource() { diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/IndexedPluralAttributeSourceImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/IndexedPluralAttributeSourceImpl.java index 7355a16fa6..8a77957729 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/IndexedPluralAttributeSourceImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/IndexedPluralAttributeSourceImpl.java @@ -25,9 +25,18 @@ import java.util.EnumSet; +import org.jboss.jandex.AnnotationInstance; +import org.jboss.jandex.JandexAntTask; + +import org.hibernate.cfg.NamingStrategy; +import org.hibernate.cfg.NotYetImplementedException; +import org.hibernate.internal.util.StringHelper; +import org.hibernate.metamodel.internal.Binder; import org.hibernate.metamodel.internal.source.annotations.attribute.MappedAttribute; import org.hibernate.metamodel.internal.source.annotations.attribute.PluralAssociationAttribute; import org.hibernate.metamodel.internal.source.annotations.entity.ConfiguredClass; +import org.hibernate.metamodel.internal.source.annotations.util.JPADotNames; +import org.hibernate.metamodel.internal.source.annotations.util.JandexHelper; import org.hibernate.metamodel.spi.source.IndexedPluralAttributeSource; import org.hibernate.metamodel.spi.source.MappingException; import org.hibernate.metamodel.spi.source.PluralAttributeIndexSource; @@ -44,7 +53,8 @@ public class IndexedPluralAttributeSourceImpl extends PluralAttributeSourceImpl MappedAttribute.Nature.ELEMENT_COLLECTION_BASIC, MappedAttribute.Nature.ELEMENT_COLLECTION_EMBEDDABLE); - public IndexedPluralAttributeSourceImpl(PluralAssociationAttribute attribute, + public IndexedPluralAttributeSourceImpl( + final PluralAssociationAttribute attribute, ConfiguredClass entityClass ) { super( attribute, entityClass ); if ( !VALID_NATURES.contains( attribute.getNature() ) ) { @@ -53,12 +63,70 @@ public IndexedPluralAttributeSourceImpl(PluralAssociationAttribute attribute, attribute.getContext().getOrigin() ); } + // TODO: add checks for inconsistent annotations if ( attribute.isSequentiallyIndexed() ) { - indexSource = new SequentialPluralAttributeIndexSourceImpl( this, attribute ); + final Binder.DefaultNamingStrategy defaultNamingStrategy = new Binder.DefaultNamingStrategy() { + @Override + public String defaultName() { + return attribute.getName() + "_ORDER"; + } + }; + indexSource = new SequentialPluralAttributeIndexSourceImpl( this, attribute, defaultNamingStrategy ); + } + else if ( attribute.annotations().containsKey( JPADotNames.MAP_KEY ) ) { + // basic + throw new NotYetImplementedException( "@MapKey is not supported yet." ); + } + else if ( attribute.annotations().containsKey( JPADotNames.MAP_KEY_COLUMN ) ) { + final Binder.DefaultNamingStrategy defaultNamingStrategy = new Binder.DefaultNamingStrategy() { + @Override + public String defaultName() { + return attribute.getName() + "_KEY"; + } + }; + indexSource = new BasicPluralAttributeIndexSourceImpl( this, attribute, defaultNamingStrategy ); + } + else if ( attribute.annotations().containsKey( JPADotNames.MAP_KEY_ENUMERATED ) ) { + // basic + throw new NotYetImplementedException( "@MapKeyEnumerated is not supported yet." ); + } + else if ( attribute.annotations().containsKey( JPADotNames.MAP_KEY_TEMPORAL ) ) { + // basic + throw new NotYetImplementedException( "@MapKeyTemporal is not supported yet." ); + } + else if ( attribute.annotations().containsKey( JPADotNames.MAP_KEY_CLASS ) ) { + // can be anything + throw new NotYetImplementedException( "@MapKeyClass is not supported yet." ); + } + else if ( attribute.annotations().containsKey( JPADotNames.MAP_KEY_JOIN_COLUMN ) ) { + // association + throw new NotYetImplementedException( "@MapKeyJoinColumn is not supported yet." ); + } + else if ( attribute.annotations().containsKey( JPADotNames.MAP_KEY_JOIN_COLUMNS ) ) { + // association + throw new NotYetImplementedException( "@MapKeyJoinColumns is not supported yet." ); + } + else if ( String.class.equals( attribute.getIndexType() ) || attribute.getIndexType().isPrimitive() ) { + final Binder.DefaultNamingStrategy defaultNamingStrategy = new Binder.DefaultNamingStrategy() { + @Override + public String defaultName() { + return attribute.getName() + "_KEY"; + } + }; + indexSource = new BasicPluralAttributeIndexSourceImpl( this, attribute, defaultNamingStrategy ); } else { - // for now assume the index is basic type - indexSource = new BasicPluralAttributeIndexSourceImpl( this, attribute ); + // either @Embeddable or entity type. + + // composite: + // index is @Embeddable + // @MapKeyClass is not basic, not entity type + + // association: + // MapKeyJoinColumn, MapKeyJoinColumns are present + // If the primary key of the referenced entity is not a simple primary key, must have MapKeyJoinColumns. + //indexSource = new BasicPluralAttributeIndexSourceImpl( this, attribute ); + throw new NotYetImplementedException( "Embeddable and entity keys are not supported yet." ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/SequentialPluralAttributeIndexSourceImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/SequentialPluralAttributeIndexSourceImpl.java index 32a70af8b5..ba1770b073 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/SequentialPluralAttributeIndexSourceImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/SequentialPluralAttributeIndexSourceImpl.java @@ -25,6 +25,7 @@ import org.jboss.jandex.AnnotationInstance; +import org.hibernate.metamodel.internal.Binder; import org.hibernate.metamodel.internal.source.annotations.attribute.PluralAssociationAttribute; import org.hibernate.metamodel.internal.source.annotations.util.HibernateDotNames; import org.hibernate.metamodel.internal.source.annotations.util.JPADotNames; @@ -38,8 +39,11 @@ public class SequentialPluralAttributeIndexSourceImpl extends BasicPluralAttributeIndexSourceImpl implements SequentialPluralAttributeIndexSource { private final int base; - public SequentialPluralAttributeIndexSourceImpl(IndexedPluralAttributeSourceImpl indexedPluralAttributeSource, PluralAssociationAttribute attribute) { - super( indexedPluralAttributeSource, attribute ); + public SequentialPluralAttributeIndexSourceImpl( + IndexedPluralAttributeSourceImpl indexedPluralAttributeSource, + PluralAssociationAttribute attribute, + Binder.DefaultNamingStrategy defaultNamingStrategy) { + super( indexedPluralAttributeSource, attribute, defaultNamingStrategy ); AnnotationInstance columnAnnotation = JandexHelper.getSingleAnnotation( attribute.annotations(), HibernateDotNames.INDEX_COLUMN diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/AssociationAttribute.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/AssociationAttribute.java index 6c0803d524..0935bc44f1 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/AssociationAttribute.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/AssociationAttribute.java @@ -74,6 +74,7 @@ public class AssociationAttribute extends MappedAttribute { private final boolean ignoreNotFound; private final String referencedEntityType; + private final Class referencedAttributeType; private final String mappedBy; private final Set cascadeTypes; private final Set hibernateCascadeTypes; @@ -146,6 +147,7 @@ static AssociationAttribute createAssociationAttribute( // using jandex we don't really care which exact type of annotation we are dealing with this.referencedEntityType = determineReferencedEntityType( associationAnnotation, referencedAttributeType ); + this.referencedAttributeType = referencedAttributeType; this.mappedBy = determineMappedByAttributeName( associationAnnotation ); this.isOptional = determineOptionality( associationAnnotation ); this.isLazy = determineIsLazy( associationAnnotation ); @@ -174,6 +176,10 @@ public String getReferencedEntityType() { return referencedEntityType; } + public Class getReferencedAttributeType() { + return referencedAttributeType; + } + public String getMappedBy() { return mappedBy; } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/Column.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/Column.java index f3f3ac848c..b55d08ac32 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/Column.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/Column.java @@ -66,6 +66,7 @@ protected void applyCheck(AnnotationInstance columnAnnotation) { || JPADotNames.ORDER_COLUMN.equals( name ) || HibernateDotNames.INDEX_COLUMN.equals( name ) || JPADotNames.PRIMARY_KEY_JOIN_COLUMN.equals( name ) + || JPADotNames.MAP_KEY_COLUMN.equals( name ) ) ) { throw new AssertionFailure( "A @Column or @JoinColumn annotation needs to be passed to the constructor" ); diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/PluralAssociationAttribute.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/PluralAssociationAttribute.java index 772cfdbe0f..8de9290f32 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/PluralAssociationAttribute.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/PluralAssociationAttribute.java @@ -43,6 +43,12 @@ import org.hibernate.annotations.OnDeleteAction; import org.hibernate.annotations.SortType; import org.hibernate.internal.util.StringHelper; +import org.hibernate.metamodel.internal.source.annotations.attribute.type.AttributeTypeResolver; +import org.hibernate.metamodel.internal.source.annotations.attribute.type.AttributeTypeResolverImpl; +import org.hibernate.metamodel.internal.source.annotations.attribute.type.CompositeAttributeTypeResolver; +import org.hibernate.metamodel.internal.source.annotations.attribute.type.EnumeratedTypeResolver; +import org.hibernate.metamodel.internal.source.annotations.attribute.type.LobTypeResolver; +import org.hibernate.metamodel.internal.source.annotations.attribute.type.TemporalTypeResolver; import org.hibernate.metamodel.internal.source.annotations.entity.EntityBindingContext; import org.hibernate.metamodel.internal.source.annotations.util.AnnotationParserHelper; import org.hibernate.metamodel.internal.source.annotations.util.HibernateDotNames; @@ -60,6 +66,7 @@ * @author Strong Liu */ public class PluralAssociationAttribute extends AssociationAttribute { + private final Class indexType; private final String whereClause; private final String orderBy; private final boolean sorted; @@ -93,6 +100,7 @@ public static PluralAssociationAttribute createPluralAssociationAttribute( ClassInfo entityClassInfo, String name, Class attributeType, + Class indexType, Class referencedAttributeType, Nature attributeNature, String accessType, @@ -102,6 +110,7 @@ public static PluralAssociationAttribute createPluralAssociationAttribute( entityClassInfo, name, attributeType, + indexType, referencedAttributeType, attributeNature, accessType, @@ -114,6 +123,10 @@ public PluralAttributeSource.Nature getPluralAttributeNature() { return pluralAttributeNature; } + public Class getIndexType() { + return indexType; + } + public String getWhereClause() { return whereClause; } @@ -185,6 +198,7 @@ private PluralAssociationAttribute( final ClassInfo entityClassInfo, final String name, final Class attributeType, + final Class indexType, final Class referencedAttributeType, final Nature associationType, final String accessType, @@ -192,6 +206,7 @@ private PluralAssociationAttribute( final EntityBindingContext context) { super( entityClassInfo, name, attributeType, referencedAttributeType, associationType, accessType, annotations, context ); this.entityClassInfo = entityClassInfo; + this.indexType = indexType; this.whereClause = determineWereClause(); this.orderBy = determineOrderBy(); @@ -525,6 +540,19 @@ private Caching determineCachingSettings() { public boolean isMutable() { return mutable; } + + /* + @Override + public AttributeTypeResolver getHibernateTypeResolver() { + CompositeAttributeTypeResolver resolver = new CompositeAttributeTypeResolver( this ); + resolver.addHibernateTypeResolver( new AttributeTypeResolverImpl( this ) ); + // TODO: make it work for temporal elements + //resolver.addHibernateTypeResolver( new TemporalTypeResolver( this ) ); + resolver.addHibernateTypeResolver( new LobTypeResolver( this ) ); + resolver.addHibernateTypeResolver( new EnumeratedTypeResolver( this ) ); + return resolver; + } + */ } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/type/EnumeratedTypeResolver.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/type/EnumeratedTypeResolver.java index 22e5d2cabc..8be6dfc10a 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/type/EnumeratedTypeResolver.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/attribute/type/EnumeratedTypeResolver.java @@ -33,9 +33,11 @@ import org.hibernate.AnnotationException; import org.hibernate.AssertionFailure; import org.hibernate.metamodel.internal.source.annotations.attribute.MappedAttribute; +import org.hibernate.metamodel.internal.source.annotations.attribute.PluralAssociationAttribute; import org.hibernate.metamodel.internal.source.annotations.util.JPADotNames; import org.hibernate.metamodel.internal.source.annotations.util.JandexHelper; import org.hibernate.type.EnumType; +import org.hibernate.usertype.DynamicParameterizedType; /** * @author Strong Liu @@ -44,11 +46,20 @@ public class EnumeratedTypeResolver extends AbstractAttributeTypeResolver { private final boolean isMapKey; private final boolean isEnum; +// private final String attributeType; public EnumeratedTypeResolver(MappedAttribute mappedAttribute) { super( mappedAttribute ); isEnum = mappedAttribute.getAttributeType().isEnum(); isMapKey = false;//todo +// attributeType = mappedAttribute.getAttributeType().getName(); + } + + public EnumeratedTypeResolver(PluralAssociationAttribute pluralAssociationAttribute) { + super( pluralAssociationAttribute ); + isEnum = pluralAssociationAttribute.getReferencedAttributeType().isEnum(); + isMapKey = false;//todo +// attributeType = pluralAssociationAttribute.getReferencedAttributeType().getName(); } @Override @@ -98,6 +109,7 @@ else if ( javax.persistence.EnumType.STRING.equals( enumType ) ) { else { typeParameters.put( EnumType.TYPE, String.valueOf( Types.INTEGER ) ); } +// typeParameters.put( DynamicParameterizedType.RETURNED_CLASS, attributeType ); return typeParameters; } } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/entity/ConfiguredClass.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/entity/ConfiguredClass.java index 477370f0fd..e6eed8da2a 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/entity/ConfiguredClass.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/entity/ConfiguredClass.java @@ -451,7 +451,10 @@ private void createMappedAttribute(Member member, ResolvedTypeWithMembers resolv ); Class attributeType = resolvedMember.getType().getErasedType(); Class referencedCollectionType = resolveCollectionValuedReferenceType( resolvedMember, annotations ); - + Class indexType = null; + if(Map.class.isAssignableFrom( attributeType )){ + indexType = resolvedMember.getType().getTypeParameters().get( 0 ).getErasedType(); + } MappedAttribute.Nature attributeNature = determineAttributeNature( annotations, attributeType, referencedCollectionType ); String accessTypeString = accessType.toString().toLowerCase(); @@ -536,6 +539,7 @@ else if ( attribute.isVersioned() ) { classInfo, attributeName, resolvedMember.getType().getErasedType(), + indexType, referencedCollectionType, attributeNature, accessTypeString, diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/CompositePluralAttributeIndexSourceImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/CompositePluralAttributeIndexSourceImpl.java index 0c39bfe5e6..a3870296b1 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/CompositePluralAttributeIndexSourceImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/CompositePluralAttributeIndexSourceImpl.java @@ -31,6 +31,7 @@ import org.hibernate.jaxb.spi.hbm.JaxbCompositeMapKeyElement; import org.hibernate.jaxb.spi.hbm.JaxbKeyManyToOneElement; import org.hibernate.jaxb.spi.hbm.JaxbKeyPropertyElement; +import org.hibernate.metamodel.internal.Binder; import org.hibernate.metamodel.spi.binding.PluralAttributeIndexBinding; import org.hibernate.metamodel.spi.binding.SingularAttributeBinding; import org.hibernate.metamodel.spi.source.AttributeSource; @@ -89,6 +90,11 @@ public PluralAttributeIndexBinding.Nature getNature() { return PluralAttributeIndexBinding.Nature.AGGREGATE; } + @Override + public List getDefaultNamingStrategies() { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + @Override public String getClassName() { return className; diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/MapKeySourceImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/MapKeySourceImpl.java index da1b7d16a5..657df3e6e4 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/MapKeySourceImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/MapKeySourceImpl.java @@ -29,6 +29,7 @@ import org.hibernate.jaxb.spi.hbm.JaxbColumnElement; import org.hibernate.jaxb.spi.hbm.JaxbIndexElement; import org.hibernate.jaxb.spi.hbm.JaxbMapKeyElement; +import org.hibernate.metamodel.internal.Binder; import org.hibernate.metamodel.spi.binding.PluralAttributeIndexBinding; import org.hibernate.metamodel.spi.source.BasicPluralAttributeIndexSource; import org.hibernate.metamodel.spi.source.ExplicitHibernateTypeSource; @@ -184,6 +185,11 @@ public PluralAttributeIndexBinding.Nature getNature() { return nature; } + @Override + public List getDefaultNamingStrategies() { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + @Override public ExplicitHibernateTypeSource explicitHibernateTypeSource() { return typeSource; diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/SequentialPluralAttributeIndexSourceImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/SequentialPluralAttributeIndexSourceImpl.java index e1472d8cf0..5b565380e0 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/SequentialPluralAttributeIndexSourceImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/SequentialPluralAttributeIndexSourceImpl.java @@ -31,6 +31,7 @@ import org.hibernate.jaxb.spi.hbm.JaxbColumnElement; import org.hibernate.jaxb.spi.hbm.JaxbIndexElement; import org.hibernate.jaxb.spi.hbm.JaxbListIndexElement; +import org.hibernate.metamodel.internal.Binder; import org.hibernate.metamodel.spi.binding.PluralAttributeIndexBinding; import org.hibernate.metamodel.spi.source.ExplicitHibernateTypeSource; import org.hibernate.metamodel.spi.source.RelationalValueSource; @@ -157,6 +158,11 @@ public PluralAttributeIndexBinding.Nature getNature() { return PluralAttributeIndexBinding.Nature.BASIC; } + @Override + public List getDefaultNamingStrategies() { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + @Override public ExplicitHibernateTypeSource explicitHibernateTypeSource() { return typeSource; diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/spi/source/PluralAttributeIndexSource.java b/hibernate-core/src/main/java/org/hibernate/metamodel/spi/source/PluralAttributeIndexSource.java index 0b6bcd5aea..6154fb2172 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/spi/source/PluralAttributeIndexSource.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/spi/source/PluralAttributeIndexSource.java @@ -23,6 +23,9 @@ */ package org.hibernate.metamodel.spi.source; +import java.util.List; + +import org.hibernate.metamodel.internal.Binder; import org.hibernate.metamodel.spi.binding.PluralAttributeIndexBinding; /** @@ -30,4 +33,5 @@ */ public interface PluralAttributeIndexSource extends RelationalValueSourceContainer { PluralAttributeIndexBinding.Nature getNature(); + List getDefaultNamingStrategies(); } diff --git a/hibernate-core/src/test/java/org/hibernate/metamodel/spi/binding/onetomany/AbstractUnidirectionalOneToManyBindingTests.java b/hibernate-core/src/test/java/org/hibernate/metamodel/spi/binding/onetomany/AbstractUnidirectionalOneToManyBindingTests.java index 039b96a766..3728b98d1a 100644 --- a/hibernate-core/src/test/java/org/hibernate/metamodel/spi/binding/onetomany/AbstractUnidirectionalOneToManyBindingTests.java +++ b/hibernate-core/src/test/java/org/hibernate/metamodel/spi/binding/onetomany/AbstractUnidirectionalOneToManyBindingTests.java @@ -48,6 +48,7 @@ import org.hibernate.metamodel.spi.relational.Column; import org.hibernate.metamodel.spi.relational.Identifier; import org.hibernate.metamodel.spi.relational.Value; +import org.hibernate.testing.FailureExpectedWithNewMetamodel; import org.hibernate.testing.junit4.BaseUnitTestCase; import org.hibernate.type.BagType; import org.hibernate.type.CollectionType; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/array/ArrayTest.java b/hibernate-core/src/test/java/org/hibernate/test/annotations/array/ArrayTest.java index 78c3f5df40..07c10861f4 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/array/ArrayTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/annotations/array/ArrayTest.java @@ -37,7 +37,6 @@ /** * @author Emmanuel Bernard */ -@FailureExpectedWithNewMetamodel public class ArrayTest extends BaseCoreFunctionalTestCase { @Test public void testOneToMany() throws Exception { diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java b/hibernate-core/src/test/java/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java index d67ef9edc8..a6004adbef 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java @@ -52,7 +52,7 @@ @SuppressWarnings("unchecked") public class CollectionElementTest extends BaseCoreFunctionalTestCase { @Test - @FailureExpectedWithNewMetamodel + @FailureExpectedWithNewMetamodel( message = "Map with EnumType value not supported yet.") public void testSimpleElement() throws Exception { assertEquals( "BoyFavoriteNumbers", SchemaUtil.getCollection( Boy.class, "favoriteNumbers", metadata() ) .getPluralAttributeKeyBinding().getCollectionTable().getLogicalName().toString() ); @@ -103,7 +103,7 @@ public void testSimpleElement() throws Exception { } @Test - @FailureExpectedWithNewMetamodel + @FailureExpectedWithNewMetamodel( message = "AttributeOverride for embeddable not working.") public void testCompositeElement() throws Exception { Session s = openSession(); s.getTransaction().begin(); @@ -160,7 +160,7 @@ public void testAttributedJoin() throws Exception { } @Test - @FailureExpectedWithNewMetamodel + @FailureExpectedWithNewMetamodel( message = "Collection with EnumType element not supported yet.") public void testLazyCollectionofElements() throws Exception { assertEquals( "BoyFavoriteNumbers", SchemaUtil.getCollection( Boy.class, "favoriteNumbers", metadata() ) .getPluralAttributeKeyBinding().getCollectionTable().getLogicalName().toString() ); @@ -202,7 +202,7 @@ public void testLazyCollectionofElements() throws Exception { } @Test - @FailureExpectedWithNewMetamodel + @FailureExpectedWithNewMetamodel( message = "Map with EnumType key not supported yet.") public void testFetchEagerAndFilter() throws Exception { Session s = openSession(); Transaction tx = s.beginTransaction(); @@ -233,7 +233,6 @@ public void testFetchEagerAndFilter() throws Exception { } @Test - @FailureExpectedWithNewMetamodel public void testMapKeyType() throws Exception { Matrix m = new Matrix(); m.getMvalues().put( 1, 1.1f ); diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java b/hibernate-core/src/test/java/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java index 0ab1975070..f908806c76 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java @@ -26,11 +26,13 @@ import org.junit.Test; import org.hibernate.Session; +import org.hibernate.testing.FailureExpectedWithNewMetamodel; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; /** * @author Emmanuel Bernard */ +@FailureExpectedWithNewMetamodel( message = "@MapKey is not supported yet." ) public class GenericsInheritanceTest extends BaseCoreFunctionalTestCase { @Test public void testMapping() throws Exception { diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java b/hibernate-core/src/test/java/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java index 7e7bb45345..95b57be747 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java @@ -53,6 +53,7 @@ * * @author Emmanuel Bernard */ +@FailureExpectedWithNewMetamodel( message = "@MapKeyJoinColumns not supported yet." ) public class IndexedCollectionTest extends BaseCoreFunctionalTestCase { @Test @FailureExpectedWithNewMetamodel diff --git a/hibernate-core/src/test/java/org/hibernate/test/unidir/BackrefTest.java b/hibernate-core/src/test/java/org/hibernate/test/unidir/BackrefTest.java index 8c403e79a1..93059da9d5 100755 --- a/hibernate-core/src/test/java/org/hibernate/test/unidir/BackrefTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/unidir/BackrefTest.java @@ -41,7 +41,7 @@ public class BackrefTest extends BaseCoreFunctionalTestCase { protected String[] getMappings() { return new String[] { "unidir/ParentChild.hbm.xml" }; } - + @Override protected Class[] getAnnotatedClasses() { // No test needed at this time. This was purely to test a