code: void buildIntermediateManyToOneOneToMany(Relation middleToLeft, Entity middleEntity, Relation middleToRight) {
          Namer toNamer = relationUtil.getManyToOneIntermediateNamer(middleToLeft.getTo(), middleToRight.getFromAttribute().getColumnConfig(),
                  middleToRight.getTo());
          Namer fromNamer = relationUtil.getOneToManyIntermediateNamer(middleToRight.getTo(), middleToLeft.getFromAttribute().getColumnConfig(),
                  middleToLeft.getTo());
  
          IntermediateManyToOne m2o = new IntermediateManyToOne(fromNamer, toNamer, middleEntity, middleToLeft, middleToRight);
          ManyToOneConfig m2oConfig = middleToRight.getFromAttribute().getColumnConfig().getManyToOneConfig();
  
          m2o.setCascadeGetter(m2oConfig);
          m2o.setFetchTypeGetter(m2oConfig);
          setLabelSingular(m2oConfig, m2o);
          configureActions(m2o, cfg().getDefaultManyToOneConfig(), m2oConfig);
  
          middleToLeft.getToEntity().addRelation(m2o);
  
          if (shouldCreateInverse(m2o)) {
              // ONE TO MANY with intermediate table
              IntermediateOneToMany o2m = (IntermediateOneToMany) m2o.createInverse(); // TODO: fix cast ?
              OneToManyConfig o2mConfig = middleToLeft.getFromAttribute().getColumnConfig().getOneToManyConfig();
  
              o2m.setCascadeGetter(o2mConfig);
              o2m.setFetchTypeGetter(o2mConfig);
              o2m.setOrderByGetter(o2mConfig);
  
              setLabelPlural(o2mConfig, o2m);
              initDisplayOrderAsString(o2mConfig, o2m);
  
              configureActions(o2m, cfg().getDefaultOneToManyConfig(), o2mConfig);
              middleToRight.getToEntity().addRelation(o2m);
          }
      }
docs: ----------------------------------------