@Override protected boolean bindStarToManySecondPass( Map persistentClasses, XClass collType, Ejb3JoinColumn[] fkJoinColumns, Ejb3JoinColumn[] keyColumns, Ejb3JoinColumn[] inverseColumns, Ejb3Column[] elementColumns, boolean isEmbedded, XProperty property, boolean unique, TableBinder associationTableBinder, boolean ignoreNotFound, Mappings mappings) { boolean result = super.bindStarToManySecondPass( persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns, isEmbedded, property, unique, associationTableBinder, ignoreNotFound, mappings ); CollectionId collectionIdAnn = property.getAnnotation( CollectionId.class ); if ( collectionIdAnn != null ) { SimpleValueBinder simpleValue = new SimpleValueBinder(); PropertyData propertyData = new WrappedInferredData( new PropertyInferredData( null, property, null, //default access should not be useful mappings.getReflectionManager() ), "id" ); Ejb3Column[] idColumns = Ejb3Column.buildColumnFromAnnotation( collectionIdAnn.columns(), null, Nullability.FORCED_NOT_NULL, propertyHolder, propertyData, Collections.EMPTY_MAP, mappings ); //we need to make sure all id columns must be not-null. for(Ejb3Column idColumn:idColumns){ idColumn.setNullable(false); } Table table = collection.getCollectionTable(); simpleValue.setTable( table ); simpleValue.setColumns( idColumns ); Type typeAnn = collectionIdAnn.type(); if ( typeAnn != null && !BinderHelper.isEmptyAnnotationValue( typeAnn.type() ) ) { simpleValue.setExplicitType( typeAnn ); } else { throw new AnnotationException( "@CollectionId is missing type: " + StringHelper.qualify( propertyHolder.getPath(), propertyName ) ); } simpleValue.setMappings( mappings ); SimpleValue id = simpleValue.make(); ( (IdentifierCollection) collection ).setIdentifier( id ); String generator = collectionIdAnn.generator(); String generatorType; if ( "identity".equals( generator ) || "assigned".equals( generator ) || "sequence".equals( generator ) || "native".equals( generator ) ) { generatorType = generator; generator = ""; } else { generatorType = null; } BinderHelper.makeIdGenerator( id, generatorType, generator, mappings, localGenerators ); } return result; }