void buildIntermediateManyToManyManyToMany(Relation middleToLeft, Entity middleEntity, Relation middleToRight) {
        // MANY TO MANY
        // Note: if the manyToManyConfig is null, by convention, we create the m2m relation

        Namer toNamer = relationUtil.getManyToManyNamer(middleToLeft.getTo(), middleToRight.getFromAttribute().getColumnConfig(), middleToRight.getTo());
        Namer fromNamer = relationUtil.getManyToManyNamer(middleToRight.getTo(), middleToLeft.getFromAttribute().getColumnConfig(), middleToLeft.getTo());

        ManyToMany m2m = new ManyToMany(fromNamer, toNamer, middleEntity, middleToLeft, middleToRight);
        ManyToManyConfig m2mConfig = middleToRight.getFromAttribute().getColumnConfig().getManyToManyConfig();
        m2m.setCascadeGetter(m2mConfig);
        m2m.setFetchTypeGetter(m2mConfig);
        m2m.setOrderByGetter(m2mConfig);

        setLabelPlural(m2mConfig, m2m);
        initDisplayOrderAsString(m2mConfig, m2m);
        configureActions(m2m, cfg().getDefaultManyToManyConfig(), m2mConfig);
        middleToLeft.getToEntity().addRelation(m2m);

        if (shouldCreateInverse(m2m)) {
            // MANY TO MANY inverse
            ManyToMany inverseM2m = (ManyToMany) m2m.createInverse(); // TODO: fix cast ?
            ManyToManyConfig inverseM2mConfig = middleToLeft.getFromAttribute().getColumnConfig().getManyToManyConfig();
            inverseM2m.setCascadeGetter(inverseM2mConfig);
            inverseM2m.setFetchTypeGetter(inverseM2mConfig);
            inverseM2m.setOrderByGetter(inverseM2mConfig);
            setLabelPlural(inverseM2mConfig, inverseM2m);
            initDisplayOrderAsString(inverseM2mConfig, inverseM2m);
            configureActions(inverseM2m, cfg().getDefaultInverseManyToManyConfig(), inverseM2mConfig);
            middleToRight.getToEntity().addRelation(inverseM2m);
        }
    }
void buildIntermediateManyToManyManyToMany ( Relation middleToLeft , Entity middleEntity , Relation middleToRight ) { Namer toNamer = relationUtil . getManyToManyNamer ( middleToLeft . getTo ( ) , middleToRight . getFromAttribute ( ) . getColumnConfig ( ) , middleToRight . getTo ( ) ) ; Namer fromNamer = relationUtil . getManyToManyNamer ( middleToRight . getTo ( ) , middleToLeft . getFromAttribute ( ) . getColumnConfig ( ) , middleToLeft . getTo ( ) ) ; ManyToMany m2m = new ManyToMany ( fromNamer , toNamer , middleEntity , middleToLeft , middleToRight ) ; ManyToManyConfig m2mConfig = middleToRight . getFromAttribute ( ) . getColumnConfig ( ) . getManyToManyConfig ( ) ; m2m . setCascadeGetter ( m2mConfig ) ; m2m . setFetchTypeGetter ( m2mConfig ) ; m2m . setOrderByGetter ( m2mConfig ) ; setLabelPlural ( m2mConfig , m2m ) ; initDisplayOrderAsString ( m2mConfig , m2m ) ; configureActions ( m2m , cfg ( ) . getDefaultManyToManyConfig ( ) , m2mConfig ) ; middleToLeft . getToEntity ( ) . addRelation ( m2m ) ; if ( shouldCreateInverse ( m2m ) ) { ManyToMany inverseM2m = ( ManyToMany ) m2m . createInverse ( ) ; ManyToManyConfig inverseM2mConfig = middleToLeft . getFromAttribute ( ) . getColumnConfig ( ) . getManyToManyConfig ( ) ; inverseM2m . setCascadeGetter ( inverseM2mConfig ) ; inverseM2m . setFetchTypeGetter ( inverseM2mConfig ) ; inverseM2m . setOrderByGetter ( inverseM2mConfig ) ; setLabelPlural ( inverseM2mConfig , inverseM2m ) ; initDisplayOrderAsString ( inverseM2mConfig , inverseM2m ) ; configureActions ( inverseM2m , cfg ( ) . getDefaultInverseManyToManyConfig ( ) , inverseM2mConfig ) ; middleToRight . getToEntity ( ) . addRelation ( inverseM2m ) ; } }
-------------------------------------------------