HHH-7900 Began skeleton code for annotated M2M maps
This commit is contained in:
parent
1cd75bbdd4
commit
48816a2c8a
|
@ -112,6 +112,7 @@ import org.hibernate.metamodel.spi.source.AggregatedCompositeIdentifierSource;
|
|||
import org.hibernate.metamodel.spi.source.AttributeSource;
|
||||
import org.hibernate.metamodel.spi.source.AttributeSourceContainer;
|
||||
import org.hibernate.metamodel.spi.source.BasicPluralAttributeElementSource;
|
||||
import org.hibernate.metamodel.spi.source.BasicPluralAttributeIndexSource;
|
||||
import org.hibernate.metamodel.spi.source.ColumnSource;
|
||||
import org.hibernate.metamodel.spi.source.ComponentAttributeSource;
|
||||
import org.hibernate.metamodel.spi.source.CompositePluralAttributeElementSource;
|
||||
|
@ -161,7 +162,6 @@ import org.hibernate.type.ComponentType;
|
|||
import org.hibernate.type.EntityType;
|
||||
import org.hibernate.type.ForeignKeyDirection;
|
||||
import org.hibernate.type.Type;
|
||||
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
/**
|
||||
|
@ -1428,10 +1428,14 @@ public class Binder {
|
|||
if ( attribute == null ) {
|
||||
attribute = attributeBindingContainer.getAttributeContainer().createList( attributeSource.getName() );
|
||||
}
|
||||
final int base = IndexedPluralAttributeSource.class.isInstance( attributeSource ) ? IndexedPluralAttributeSource.class
|
||||
.cast( attributeSource )
|
||||
.getIndexSource()
|
||||
.base() : 0;
|
||||
int base = 0;
|
||||
if ( IndexedPluralAttributeSource.class.isInstance( attributeSource ) ) {
|
||||
IndexedPluralAttributeSource indexedAttributeSource
|
||||
= ( IndexedPluralAttributeSource ) attributeSource;
|
||||
base = BasicPluralAttributeIndexSource.class.isInstance( attributeSource )
|
||||
? BasicPluralAttributeIndexSource.class.cast(
|
||||
indexedAttributeSource.getIndexSource() ).base() : 0;
|
||||
}
|
||||
return attributeBindingContainer.makeListAttributeBinding(
|
||||
attribute,
|
||||
pluralAttributeElementNature( attributeSource ),
|
||||
|
@ -1450,10 +1454,14 @@ public class Binder {
|
|||
if ( attribute == null ) {
|
||||
attribute = attributeBindingContainer.getAttributeContainer().createArray( attributeSource.getName() );
|
||||
}
|
||||
final int base = IndexedPluralAttributeSource.class.isInstance( attributeSource ) ? IndexedPluralAttributeSource.class
|
||||
.cast( attributeSource )
|
||||
.getIndexSource()
|
||||
.base() : 0;
|
||||
int base = 0;
|
||||
if ( IndexedPluralAttributeSource.class.isInstance( attributeSource ) ) {
|
||||
IndexedPluralAttributeSource indexedAttributeSource
|
||||
= ( IndexedPluralAttributeSource ) attributeSource;
|
||||
base = BasicPluralAttributeIndexSource.class.isInstance( attributeSource )
|
||||
? BasicPluralAttributeIndexSource.class.cast(
|
||||
indexedAttributeSource.getIndexSource() ).base() : 0;
|
||||
}
|
||||
return attributeBindingContainer.makeArrayAttributeBinding(
|
||||
attribute,
|
||||
pluralAttributeElementNature( attributeSource ),
|
||||
|
@ -1622,8 +1630,8 @@ public class Binder {
|
|||
final PluralAttributeIndexSource attributeSource,
|
||||
final String defaultIndexJavaTypeName) {
|
||||
IndexedPluralAttributeBinding indexedAttributeBinding = attributeBinding;
|
||||
final BasicPluralAttributeIndexBinding indexBinding =
|
||||
(BasicPluralAttributeIndexBinding) indexedAttributeBinding.getPluralAttributeIndexBinding();
|
||||
final PluralAttributeIndexBinding indexBinding =
|
||||
indexedAttributeBinding.getPluralAttributeIndexBinding();
|
||||
indexBinding.setIndexRelationalValue(
|
||||
bindValues(
|
||||
indexedAttributeBinding.getContainer(),
|
||||
|
|
|
@ -4,29 +4,28 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.jboss.jandex.AnnotationInstance;
|
||||
|
||||
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;
|
||||
import org.hibernate.metamodel.internal.source.annotations.util.JPADotNames;
|
||||
import org.hibernate.metamodel.internal.source.annotations.util.JandexHelper;
|
||||
import org.hibernate.metamodel.spi.binding.PluralAttributeIndexBinding;
|
||||
import org.hibernate.metamodel.spi.source.BasicPluralAttributeIndexSource;
|
||||
import org.hibernate.metamodel.spi.source.ExplicitHibernateTypeSource;
|
||||
import org.hibernate.metamodel.spi.source.PluralAttributeIndexSource;
|
||||
import org.hibernate.metamodel.spi.source.RelationalValueSource;
|
||||
import org.jboss.jandex.AnnotationInstance;
|
||||
|
||||
/**
|
||||
* @author Strong Liu <stliu@hibernate.org>
|
||||
* @author Brett Meyer
|
||||
*/
|
||||
public class PluralAttributeIndexSourceImpl implements PluralAttributeIndexSource {
|
||||
private final PluralAssociationAttribute attribute;
|
||||
private final IndexedPluralAttributeSourceImpl indexedPluralAttributeSource;
|
||||
public class BasicPluralAttributeIndexSourceImpl implements BasicPluralAttributeIndexSource {
|
||||
// private final PluralAssociationAttribute attribute;
|
||||
private final int base;
|
||||
private final List<RelationalValueSource> relationalValueSources = new ArrayList<RelationalValueSource>( 1 );
|
||||
public PluralAttributeIndexSourceImpl(IndexedPluralAttributeSourceImpl indexedPluralAttributeSource, PluralAssociationAttribute attribute) {
|
||||
this.attribute = attribute;
|
||||
this.indexedPluralAttributeSource = indexedPluralAttributeSource;
|
||||
public BasicPluralAttributeIndexSourceImpl(
|
||||
PluralAssociationAttribute attribute ) {
|
||||
// this.attribute = attribute;
|
||||
AnnotationInstance columnAnnotation = JandexHelper.getSingleAnnotation(
|
||||
attribute.annotations(),
|
||||
HibernateDotNames.INDEX_COLUMN
|
||||
|
@ -46,17 +45,7 @@ public class PluralAttributeIndexSourceImpl implements PluralAttributeIndexSourc
|
|||
|
||||
@Override
|
||||
public PluralAttributeIndexBinding.Nature getNature() {
|
||||
switch ( indexedPluralAttributeSource.getElementSource().getNature() ) {
|
||||
case BASIC:
|
||||
return PluralAttributeIndexBinding.Nature.BASIC;
|
||||
case AGGREGATE:
|
||||
return PluralAttributeIndexBinding.Nature.AGGREGATE;
|
||||
case MANY_TO_ANY:
|
||||
return PluralAttributeIndexBinding.Nature.MANY_TO_ANY;
|
||||
case MANY_TO_MANY:
|
||||
return PluralAttributeIndexBinding.Nature.MANY_TO_MANY;
|
||||
}
|
||||
return null;
|
||||
return PluralAttributeIndexBinding.Nature.BASIC;
|
||||
}
|
||||
|
||||
@Override
|
|
@ -0,0 +1,67 @@
|
|||
package org.hibernate.metamodel.internal.source.annotations;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.hibernate.metamodel.internal.source.annotations.attribute.PluralAssociationAttribute;
|
||||
import org.hibernate.metamodel.spi.binding.PluralAttributeIndexBinding;
|
||||
import org.hibernate.metamodel.spi.source.CompositePluralAttributeIndexSource;
|
||||
import org.hibernate.metamodel.spi.source.ExplicitHibernateTypeSource;
|
||||
import org.hibernate.metamodel.spi.source.RelationalValueSource;
|
||||
|
||||
/**
|
||||
* @author Brett Meyer
|
||||
*/
|
||||
public class CompositePluralAttributeIndexSourceImpl implements CompositePluralAttributeIndexSource {
|
||||
private final PluralAssociationAttribute attribute;
|
||||
private final List<RelationalValueSource> relationalValueSources = new ArrayList<RelationalValueSource>( 1 );
|
||||
public CompositePluralAttributeIndexSourceImpl(
|
||||
PluralAssociationAttribute attribute ) {
|
||||
this.attribute = attribute;
|
||||
// Column indexColumn = new Column( columnAnnotation );
|
||||
// relationalValueSources.add( new ColumnValuesSourceImpl( indexColumn ) );
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public PluralAttributeIndexBinding.Nature getNature() {
|
||||
return PluralAttributeIndexBinding.Nature.AGGREGATE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExplicitHibernateTypeSource explicitHibernateTypeSource() {
|
||||
return new ExplicitHibernateTypeSource() {
|
||||
@Override
|
||||
public String getName() {
|
||||
return attribute.getReferencedKeyType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getParameters() {
|
||||
// TODO?
|
||||
return java.util.Collections.emptyMap();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RelationalValueSource> relationalValueSources() {
|
||||
return relationalValueSources;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areValuesIncludedInInsertByDefault() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areValuesIncludedInUpdateByDefault() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areValuesNullableByDefault() {
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -5,7 +5,6 @@ import java.util.EnumSet;
|
|||
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.entity.EntityClass;
|
||||
import org.hibernate.metamodel.spi.source.IndexedPluralAttributeSource;
|
||||
import org.hibernate.metamodel.spi.source.MappingException;
|
||||
import org.hibernate.metamodel.spi.source.PluralAttributeIndexSource;
|
||||
|
@ -31,7 +30,14 @@ public class IndexedPluralAttributeSourceImpl extends PluralAttributeSourceImpl
|
|||
attribute.getContext().getOrigin()
|
||||
);
|
||||
}
|
||||
this.indexSource = new PluralAttributeIndexSourceImpl( this, attribute );
|
||||
switch ( attribute.getPluralAttributeNature() ) {
|
||||
case MAP:
|
||||
// TODO: Need to support MANY_TO_MANY too
|
||||
this.indexSource = new CompositePluralAttributeIndexSourceImpl( attribute );
|
||||
break;
|
||||
default:
|
||||
this.indexSource = new BasicPluralAttributeIndexSourceImpl( attribute );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -33,11 +33,6 @@ import java.util.SortedSet;
|
|||
|
||||
import javax.persistence.FetchType;
|
||||
|
||||
import org.jboss.jandex.AnnotationInstance;
|
||||
import org.jboss.jandex.ClassInfo;
|
||||
import org.jboss.jandex.DotName;
|
||||
|
||||
import org.hibernate.AnnotationException;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
import org.hibernate.annotations.FetchMode;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
|
@ -53,12 +48,16 @@ import org.hibernate.metamodel.spi.binding.Caching;
|
|||
import org.hibernate.metamodel.spi.binding.CustomSQL;
|
||||
import org.hibernate.metamodel.spi.source.MappingException;
|
||||
import org.hibernate.metamodel.spi.source.PluralAttributeSource;
|
||||
import org.jboss.jandex.AnnotationInstance;
|
||||
import org.jboss.jandex.ClassInfo;
|
||||
import org.jboss.jandex.DotName;
|
||||
|
||||
/**
|
||||
* Represents an collection (collection, list, set, map) association attribute.
|
||||
*
|
||||
* @author Hardy Ferentschik
|
||||
* @author Strong Liu
|
||||
* @author Brett Meyer
|
||||
*/
|
||||
public class PluralAssociationAttribute extends AssociationAttribute {
|
||||
private final String whereClause;
|
||||
|
@ -86,104 +85,15 @@ public class PluralAssociationAttribute extends AssociationAttribute {
|
|||
|
||||
private LazyCollectionOption lazyOption;
|
||||
private final boolean isCollectionIdPresent;
|
||||
|
||||
private final String referencedKeyType;
|
||||
|
||||
|
||||
public static PluralAssociationAttribute createPluralAssociationAttribute(
|
||||
ClassInfo entityClassInfo,
|
||||
String name,
|
||||
Class<?> attributeType,
|
||||
Class<?> referencedAttributeType,
|
||||
Nature attributeNature,
|
||||
String accessType,
|
||||
Map<DotName, List<AnnotationInstance>> annotations,
|
||||
EntityBindingContext context) {
|
||||
return new PluralAssociationAttribute(
|
||||
entityClassInfo,
|
||||
name,
|
||||
attributeType,
|
||||
referencedAttributeType,
|
||||
attributeNature,
|
||||
accessType,
|
||||
annotations,
|
||||
context
|
||||
);
|
||||
}
|
||||
|
||||
public PluralAttributeSource.Nature getPluralAttributeNature() {
|
||||
return pluralAttributeNature;
|
||||
}
|
||||
|
||||
public String getWhereClause() {
|
||||
return whereClause;
|
||||
}
|
||||
|
||||
public String getOrderBy() {
|
||||
return orderBy;
|
||||
}
|
||||
|
||||
public String getInverseForeignKeyName() {
|
||||
return inverseForeignKeyName;
|
||||
}
|
||||
public String getExplicitForeignKeyName(){
|
||||
return explicitForeignKeyName;
|
||||
}
|
||||
|
||||
public Caching getCaching() {
|
||||
return caching;
|
||||
}
|
||||
|
||||
public String getCustomPersister() {
|
||||
return customPersister;
|
||||
}
|
||||
|
||||
public String getCustomLoaderName() {
|
||||
return customLoaderName;
|
||||
}
|
||||
|
||||
public CustomSQL getCustomInsert() {
|
||||
return customInsert;
|
||||
}
|
||||
|
||||
public CustomSQL getCustomUpdate() {
|
||||
return customUpdate;
|
||||
}
|
||||
|
||||
public CustomSQL getCustomDelete() {
|
||||
return customDelete;
|
||||
}
|
||||
|
||||
public CustomSQL getCustomDeleteAll() {
|
||||
return customDeleteAll;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append( "PluralAssociationAttribute" );
|
||||
sb.append( "{name='" ).append( getName() ).append( '\'' );
|
||||
sb.append( '}' );
|
||||
return sb.toString();
|
||||
}
|
||||
public OnDeleteAction getOnDeleteAction() {
|
||||
return onDeleteAction;
|
||||
}
|
||||
|
||||
public String getComparatorName() {
|
||||
return comparatorName;
|
||||
}
|
||||
|
||||
public boolean isSorted() {
|
||||
return sorted;
|
||||
}
|
||||
|
||||
public boolean isIndexed() {
|
||||
return isIndexed;
|
||||
}
|
||||
|
||||
private PluralAssociationAttribute(
|
||||
public PluralAssociationAttribute(
|
||||
final ClassInfo entityClassInfo,
|
||||
final String name,
|
||||
final Class<?> attributeType,
|
||||
final Class<?> referencedKeyType,
|
||||
final Class<?> referencedAttributeType,
|
||||
final Nature associationType,
|
||||
final String accessType,
|
||||
|
@ -260,12 +170,91 @@ public class PluralAssociationAttribute extends AssociationAttribute {
|
|||
getContext().getOrigin()
|
||||
);
|
||||
}
|
||||
this.isIndexed = orderColumnAnnotation != null || indexColumnAnnotation != null;
|
||||
this.isIndexed = orderColumnAnnotation != null
|
||||
|| indexColumnAnnotation != null
|
||||
|| Map.class.isAssignableFrom( getAttributeType() );
|
||||
this.pluralAttributeNature = resolvePluralAttributeNature();
|
||||
|
||||
this.referencedKeyType = determineReferencedKeyType( referencedKeyType );
|
||||
|
||||
validateMapping();
|
||||
}
|
||||
|
||||
public PluralAttributeSource.Nature getPluralAttributeNature() {
|
||||
return pluralAttributeNature;
|
||||
}
|
||||
|
||||
public String getWhereClause() {
|
||||
return whereClause;
|
||||
}
|
||||
|
||||
public String getOrderBy() {
|
||||
return orderBy;
|
||||
}
|
||||
|
||||
public String getInverseForeignKeyName() {
|
||||
return inverseForeignKeyName;
|
||||
}
|
||||
public String getExplicitForeignKeyName(){
|
||||
return explicitForeignKeyName;
|
||||
}
|
||||
|
||||
public Caching getCaching() {
|
||||
return caching;
|
||||
}
|
||||
|
||||
public String getCustomPersister() {
|
||||
return customPersister;
|
||||
}
|
||||
|
||||
public String getCustomLoaderName() {
|
||||
return customLoaderName;
|
||||
}
|
||||
|
||||
public CustomSQL getCustomInsert() {
|
||||
return customInsert;
|
||||
}
|
||||
|
||||
public CustomSQL getCustomUpdate() {
|
||||
return customUpdate;
|
||||
}
|
||||
|
||||
public CustomSQL getCustomDelete() {
|
||||
return customDelete;
|
||||
}
|
||||
|
||||
public CustomSQL getCustomDeleteAll() {
|
||||
return customDeleteAll;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append( "PluralAssociationAttribute" );
|
||||
sb.append( "{name='" ).append( getName() ).append( '\'' );
|
||||
sb.append( '}' );
|
||||
return sb.toString();
|
||||
}
|
||||
public OnDeleteAction getOnDeleteAction() {
|
||||
return onDeleteAction;
|
||||
}
|
||||
|
||||
public String getComparatorName() {
|
||||
return comparatorName;
|
||||
}
|
||||
|
||||
public boolean isSorted() {
|
||||
return sorted;
|
||||
}
|
||||
|
||||
public boolean isIndexed() {
|
||||
return isIndexed;
|
||||
}
|
||||
|
||||
public String getReferencedKeyType() {
|
||||
return referencedKeyType;
|
||||
}
|
||||
|
||||
private void validateMapping() {
|
||||
checkSortedTypeIsSortable();
|
||||
checkIfCollectionIdIsWronglyPlaced();
|
||||
|
@ -486,8 +475,27 @@ public class PluralAssociationAttribute extends AssociationAttribute {
|
|||
}
|
||||
return caching;
|
||||
}
|
||||
|
||||
// TODO: For Maps only -- should this be here?
|
||||
private String determineReferencedKeyType(
|
||||
Class<?> referencedKeyType ) {
|
||||
String typeName = null;
|
||||
|
||||
// @MapKeyClass
|
||||
AnnotationInstance mapKeyClassAnnotation
|
||||
= JandexHelper.getSingleAnnotation(
|
||||
annotations(), JPADotNames.MAP_KEY_CLASS );
|
||||
if ( mapKeyClassAnnotation != null ) {
|
||||
typeName = mapKeyClassAnnotation.value().asClass().name().toString();
|
||||
}
|
||||
else {
|
||||
if ( referencedKeyType != null ) {
|
||||
typeName = referencedKeyType.getName();
|
||||
}
|
||||
}
|
||||
|
||||
return typeName;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -533,10 +533,11 @@ public class ConfiguredClass {
|
|||
case ELEMENT_COLLECTION_BASIC:
|
||||
case ONE_TO_MANY:
|
||||
case MANY_TO_MANY: {
|
||||
AssociationAttribute attribute = PluralAssociationAttribute.createPluralAssociationAttribute(
|
||||
AssociationAttribute attribute = new PluralAssociationAttribute(
|
||||
classInfo,
|
||||
attributeName,
|
||||
resolvedMember.getType().getErasedType(),
|
||||
resolveCollectionKeyType( resolvedMember ),
|
||||
referencedCollectionType,
|
||||
attributeNature,
|
||||
accessTypeString,
|
||||
|
@ -712,6 +713,16 @@ public class ConfiguredClass {
|
|||
}
|
||||
}
|
||||
|
||||
private Class<?> resolveCollectionKeyType(ResolvedMember resolvedMember) {
|
||||
Class<?> type = resolvedMember.getType().getErasedType();
|
||||
if ( Map.class.isAssignableFrom( type ) ) {
|
||||
return resolvedMember.getType().getTypeParameters().get( 0 ).getErasedType();
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Populates the sets of transient field and method names.
|
||||
*/
|
||||
|
|
|
@ -32,14 +32,14 @@ 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.spi.binding.PluralAttributeIndexBinding;
|
||||
import org.hibernate.metamodel.spi.source.BasicPluralAttributeIndexSource;
|
||||
import org.hibernate.metamodel.spi.source.ExplicitHibernateTypeSource;
|
||||
import org.hibernate.metamodel.spi.source.PluralAttributeIndexSource;
|
||||
import org.hibernate.metamodel.spi.source.RelationalValueSource;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class ListAttributeIndexSource extends AbstractHbmSourceNode implements PluralAttributeIndexSource {
|
||||
public class ListAttributeIndexSource extends AbstractHbmSourceNode implements BasicPluralAttributeIndexSource {
|
||||
private final List< RelationalValueSource > valueSources;
|
||||
private final ExplicitHibernateTypeSource typeSource;
|
||||
private final int base;
|
||||
|
|
|
@ -30,14 +30,15 @@ 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.spi.binding.PluralAttributeIndexBinding;
|
||||
import org.hibernate.metamodel.spi.source.BasicPluralAttributeIndexSource;
|
||||
import org.hibernate.metamodel.spi.source.ExplicitHibernateTypeSource;
|
||||
import org.hibernate.metamodel.spi.source.PluralAttributeIndexSource;
|
||||
import org.hibernate.metamodel.spi.source.RelationalValueSource;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class MapAttributeIndexSource extends AbstractHbmSourceNode implements PluralAttributeIndexSource {
|
||||
// TODO: This probably needs to support non-basic.
|
||||
public class MapAttributeIndexSource extends AbstractHbmSourceNode implements BasicPluralAttributeIndexSource {
|
||||
private final PluralAttributeIndexBinding.Nature nature;
|
||||
private final List<RelationalValueSource> valueSources;
|
||||
private final ExplicitHibernateTypeSource typeSource;
|
||||
|
|
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* Copyright (c) 2011, Red Hat Inc. or third-party contributors as
|
||||
* indicated by the @author tags or express copyright attribution
|
||||
* statements applied by the authors. All third-party contributions are
|
||||
* distributed under license by Red Hat Inc.
|
||||
*
|
||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
* Lesser General Public License, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this distribution; if not, write to:
|
||||
* Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor
|
||||
* Boston, MA 02110-1301 USA
|
||||
*/
|
||||
package org.hibernate.metamodel.spi.binding;
|
||||
|
||||
import org.hibernate.metamodel.spi.domain.IndexedPluralAttribute;
|
||||
import org.hibernate.metamodel.spi.domain.Type;
|
||||
import org.hibernate.metamodel.spi.relational.Value;
|
||||
|
||||
/**
|
||||
* @author Brett Meyer
|
||||
*/
|
||||
public class CompositePluralAttributeIndexBinding implements PluralAttributeIndexBinding {
|
||||
|
||||
private final IndexedPluralAttributeBinding pluralAttributeBinding;
|
||||
private final Nature pluralAttributeIndexNature;
|
||||
private final HibernateTypeDescriptor hibernateTypeDescriptor = new HibernateTypeDescriptor();
|
||||
private Value value;
|
||||
|
||||
public CompositePluralAttributeIndexBinding(
|
||||
IndexedPluralAttributeBinding pluralAttributeBinding,
|
||||
Nature pluralAttributeIndexNature) {
|
||||
this.pluralAttributeBinding = pluralAttributeBinding;
|
||||
this.pluralAttributeIndexNature = pluralAttributeIndexNature;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HibernateTypeDescriptor getHibernateTypeDescriptor() {
|
||||
return hibernateTypeDescriptor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Value getIndexRelationalValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IndexedPluralAttributeBinding getIndexedPluralAttributeBinding() {
|
||||
return pluralAttributeBinding;
|
||||
}
|
||||
|
||||
public void setIndexRelationalValue( Value value ) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getPluralAttributeIndexType() {
|
||||
return ( (IndexedPluralAttribute) getIndexedPluralAttributeBinding().getAttribute() ).getIndexType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Nature getNature() {
|
||||
return Nature.AGGREGATE;
|
||||
}
|
||||
}
|
|
@ -51,7 +51,15 @@ public class MapBinding extends AbstractPluralAttributeBinding implements Indexe
|
|||
includedInOptimisticLocking,
|
||||
metaAttributeContext
|
||||
);
|
||||
pluralAttributeIndexBinding = new BasicPluralAttributeIndexBinding( this, pluralAttributeIndexNature );
|
||||
switch ( pluralAttributeIndexNature ) {
|
||||
// TODO: support MANY_TO_MANY & MANY_TO_ANY
|
||||
case AGGREGATE:
|
||||
pluralAttributeIndexBinding = new CompositePluralAttributeIndexBinding( this, pluralAttributeIndexNature );
|
||||
break;
|
||||
default:
|
||||
// TODO: Will this ever happen?
|
||||
pluralAttributeIndexBinding = new BasicPluralAttributeIndexBinding( this, pluralAttributeIndexNature );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -36,6 +36,9 @@ public interface PluralAttributeIndexBinding {
|
|||
|
||||
Value getIndexRelationalValue();
|
||||
|
||||
// TODO: Easier to add this here, but maybe it shouldn't be.
|
||||
void setIndexRelationalValue(Value value);
|
||||
|
||||
HibernateTypeDescriptor getHibernateTypeDescriptor();
|
||||
|
||||
Type getPluralAttributeIndexType();
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* JBoss, Home of Professional Open Source
|
||||
* Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors
|
||||
* as indicated by the @authors tag. All rights reserved.
|
||||
* See the copyright.txt in the distribution for a
|
||||
* full listing of individual contributors.
|
||||
*
|
||||
* This copyrighted material is made available to anyone wishing to use,
|
||||
* modify, copy, or redistribute it subject to the terms and conditions
|
||||
* of the GNU Lesser General Public License, v. 2.1.
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT A
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
* You should have received a copy of the GNU Lesser General Public License,
|
||||
* v.2.1 along with this distribution; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
package org.hibernate.metamodel.spi.source;
|
||||
|
||||
/**
|
||||
* @author Brett Meyer
|
||||
*/
|
||||
public interface BasicPluralAttributeIndexSource extends PluralAttributeIndexSource {
|
||||
int base();
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* JBoss, Home of Professional Open Source
|
||||
* Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors
|
||||
* as indicated by the @authors tag. All rights reserved.
|
||||
* See the copyright.txt in the distribution for a
|
||||
* full listing of individual contributors.
|
||||
*
|
||||
* This copyrighted material is made available to anyone wishing to use,
|
||||
* modify, copy, or redistribute it subject to the terms and conditions
|
||||
* of the GNU Lesser General Public License, v. 2.1.
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT A
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
* You should have received a copy of the GNU Lesser General Public License,
|
||||
* v.2.1 along with this distribution; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
package org.hibernate.metamodel.spi.source;
|
||||
|
||||
/**
|
||||
* @author Brett Meyer
|
||||
*/
|
||||
public interface CompositePluralAttributeIndexSource extends PluralAttributeIndexSource {
|
||||
|
||||
}
|
|
@ -26,10 +26,10 @@ package org.hibernate.metamodel.spi.source;
|
|||
import org.hibernate.metamodel.spi.binding.PluralAttributeIndexBinding;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Brett Meyer
|
||||
*/
|
||||
public interface PluralAttributeIndexSource extends RelationalValueSourceContainer {
|
||||
PluralAttributeIndexBinding.Nature getNature();
|
||||
// TODO: Should these be basic only?
|
||||
ExplicitHibernateTypeSource explicitHibernateTypeSource();
|
||||
int base();
|
||||
PluralAttributeIndexBinding.Nature getNature();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue