private FilterSource[] determineFilterSources(PluralAssociationAttribute associationAttribute) { AnnotationInstance filtersAnnotation = JandexHelper.getSingleAnnotation( associationAttribute.annotations(), HibernateDotNames.FILTERS); List<FilterSource> filterSourceList = new ArrayList<FilterSource>(); if (filtersAnnotation != null) { AnnotationInstance[] annotationInstances = filtersAnnotation.value().asNestedArray(); for (AnnotationInstance filterAnnotation : annotationInstances) { FilterSource filterSource = new FilterSourceImpl(filterAnnotation, entityClass.getLocalBindingContext()); filterSourceList.add(filterSource); } } AnnotationInstance filterAnnotation = JandexHelper.getSingleAnnotation( associationAttribute.annotations(), HibernateDotNames.FILTER); if (filterAnnotation != null) { FilterSource filterSource = new FilterSourceImpl(filterAnnotation, entityClass.getLocalBindingContext()); filterSourceList.add(filterSource); } if (filterSourceList.isEmpty()) { return null; } else { return filterSourceList.toArray(new FilterSource[filterSourceList.size()]); } }
private static PluralAttributeElementSource determineElementSource( AttributeSource ownerAttributeSource, PluralAttributeSourceImpl pluralAttributeSource, ConfiguredClass entityClass, String relativePath) { if (ownerAttributeSource == null) { throw new AssertionFailure("ownerAssociationSource must be non-null."); } final PluralAssociationAttribute associationAttribute = pluralAttributeSource.pluralAssociationAttribute(); switch (pluralAttributeSource.pluralAssociationAttribute().getNature()) { case MANY_TO_MANY: return associationAttribute.getMappedBy() == null ? new ManyToManyPluralAttributeElementSourceImpl( pluralAttributeSource, relativePath, entityClass.getLocalBindingContext()) : new ManyToManyMappedByPluralAttributeElementSourceImpl( pluralAttributeSource, relativePath); case MANY_TO_ANY: return new ManyToAnyPluralAttributeElementSourceImpl(pluralAttributeSource, relativePath); case ONE_TO_MANY: boolean usesJoinTable = ownerAttributeSource.isSingular() ? ((ToOneAttributeSource) ownerAttributeSource).getContainingTableName() != null : ((PluralAttributeSource) ownerAttributeSource).usesJoinTable(); if (usesJoinTable) { return associationAttribute.getMappedBy() == null ? new ManyToManyPluralAttributeElementSourceImpl( pluralAttributeSource, relativePath, entityClass.getLocalBindingContext()) : new ManyToManyMappedByPluralAttributeElementSourceImpl( pluralAttributeSource, relativePath); } else { return associationAttribute.getMappedBy() == null ? new OneToManyPluralAttributeElementSourceImpl(pluralAttributeSource, relativePath) : new OneToManyMappedByPluralAttributeElementSourceImpl( pluralAttributeSource, relativePath); } case ELEMENT_COLLECTION_BASIC: return new BasicPluralAttributeElementSourceImpl( associationAttribute, entityClass, relativePath); case ELEMENT_COLLECTION_EMBEDDABLE: { // TODO: cascadeStyles? return new CompositePluralAttributeElementSourceImpl( associationAttribute, entityClass, relativePath); } } throw new AssertionError( "Unexpected attribute nature for a association:" + associationAttribute.getNature()); }
@Override public TableSpecificationSource getCollectionTableSpecificationSource() { // todo - see org.hibernate.metamodel.internal.Binder#bindOneToManyCollectionKey // todo - needs to cater for @CollectionTable and @JoinTable if (associationAttribute.getMappedBy() != null) { throw new IllegalStateException( "Cannot get collection table because this association is not the owner."); } final AnnotationInstance joinTableAnnotation = associationAttribute.getJoinTableAnnotation(); return joinTableAnnotation == null ? null : new TableSourceImpl(joinTableAnnotation, entityClass.getLocalBindingContext()); }