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;
我认为它使用第二个连接列而不是第一个连接列 .
还有另一种方法可以做我真正需要的吗?谢谢 .