Issue type: [x]问题

Database system/driver: [x] postgres

TypeORM version: [x] 0.2.4

Steps to reproduce or a small repository showing the problem:

我在设置TypeOrm时遇到问题...在我的项目中,我需要访问一些SAP表,并且不能为关系生成额外的字段 .

这是主要实体(简化),我需要创建四个关系(VBKD,VBEP,VBAP和VBPA)

var vbak = new EntitySchema({
name: 'VBAK',
tableName: 'VBAK',
skipSync: false,
columns: {
    VBELN: {
        type:"varchar",
        primary: true,
        generated: false,
    },
},
relations: {
    comercials: {
        target: "VBKD",
        type: "one-to-many",
        cascade: true,
        joinColumn: "VBELN",
    },
    positions: {
        target: "VBAP",
        type: "one-to-many",
        cascade: true,
        joinColumn: "VBELN",
    },
    interlocutors: {
        target: "VBPA",
        type: "one-to-many",
        cascade: true,
        joinColumn: "VBELN",
    },
    distributions: {
        target: "VBEP",
        type: "one-to-many",
        cascade: true,
        joinColumn: "VBELN",
    },
}});

这个工作正常,关系名称是“空的”,因为这是我发现避免现场自动创建的唯一方法 .

var vbep = new EntitySchema({
    name: 'VBEP',
    tableName: 'VBEP',
    skipSync: true,
    columns: {
        VBELN: {
            type:"varchar",
            primary: true,
            generated: false,
        },
    },
    relations: {
        "": {
            target: 'VBAK',
            type: 'many-to-one',
            inverseSide: "distributions",
            joinColumn: "VBELN",
        },
    }
});

这个让我头疼......看看Final SQL .

var vbap = new EntitySchema({
    name: 'VBAP',
    tableName: 'VBAP',
    skipSync: false,
    columns: {
        VBELN: {
            type:"varchar",
            primary: true,
            generated: false,
        },
    },
    relations: {
        "": {
            target: 'VBAK',
            type: 'many-to-one',
            inverseSide: "positions",
            joinColumn: "VBELN"
        },
        "": {
            target: 'MARA',
            type: 'many-to-one',
            inverseSide: "orders",
            joinColumn: "MATNR",
        }
    }
});

这是SQL推出的

SELECT *
FROM "VBAK" "VBAK" 
LEFT JOIN "VBKD" "VBAK_comercials" ON "VBAK_comercials"."VBELN"="VBAK"."VBELN"  
LEFT JOIN "VBEP" "VBAK_distributions" ON "VBAK_distributions"."VBELN"="VBAK"."VBELN"  
LEFT JOIN "VBAP" "VBAK_positions" ON "VBAK_positions"."MATNR"=VBAK.MATNR  
LEFT JOIN "VBPA" "VBAK_interlocutors" ON "VBAK_interlocutors"."KUNNR"=VBAK.KUNNR;

正如您所看到的,最后两个连接使用了错误的连接列,它应该是

...LEFT JOIN "VBAP" "VBAK_positions" ON "VBAK_positions"."VBELN"=VBAK.VBELN  
LEFT JOIN "VBPA" "VBAK_interlocutors" ON "VBAK_interlocutors"."VBELN"=VBAK.VBELN;

我认为它使用第二个连接列而不是第一个连接列 .

还有另一种方法可以做我真正需要的吗?谢谢 .