class FindFromReference<
    ENTITY,
    FK_ENTITY,
    V extends Comparable<? super V>,
    SOURCE extends Field<ENTITY> & HasComparableOperators<ENTITY, V> & HasFinder<ENTITY, FK_ENTITY>>
extends AbstractFindFrom<ENTITY, FK_ENTITY, V, SOURCE, HasComparableOperators<FK_ENTITY, V>> {

    public FindFromReference(SOURCE source, HasComparableOperators<FK_ENTITY, V> target, TableIdentifier<FK_ENTITY> identifier, Supplier<Stream<FK_ENTITY>> streamSupplier) {
        super(source, target, identifier, streamSupplier);
    }

    @Override
    public FK_ENTITY apply(ENTITY entity) {<FILL_FUNCTION_BODY>}
}

        @SuppressWarnings("unchecked")
        final V value = (V) getSourceField().getter().apply(entity);
        if (value == null) {
            return null;
        } else {
            return stream()
                .filter(getTargetField().equal(value))
                .findAny()
                .orElseThrow(() -> new SpeedmentFieldException(
                    "Error! Could not find any entities in table '" + 
                    getTableIdentifier() + 
                    "' with '" + getTargetField().identifier().getColumnId() +
                    "' = '" + value + "'."
                ));
        }
    
<methods>public final SOURCE getSourceField() ,public final TableIdentifier<FK_ENTITY> getTableIdentifier() ,public final HasComparableOperators<FK_ENTITY,V> getTargetField() <variables>private final non-sealed TableIdentifier<FK_ENTITY> identifier,private final non-sealed SOURCE source,private final non-sealed Supplier<Stream<FK_ENTITY>> streamSupplier,private final non-sealed HasComparableOperators<FK_ENTITY,V> target