oracle 对于表名的定义包含了是否包含双引号的问题,但是默认typeorm 创建的是包含了双引号的,造成数据查询会有问题(typeorm 自身没有问题,但是外部查询会有问题)
解决方法
- 自定义命名策略
参考
class OracleNameStrategy extends typeorm.DefaultNamingStrategy {
tableName(targetName,userSpecifiedName) {
if(userSpecifiedName) {
return userSpecifiedName.toUpperCase();
}
return targetName.toUpperCase();
}
}
- 使用
在datasource 中定义
const dataSource = new typeorm.DataSource({
type: "oracle",
username: "xxxxxx",
password: "xxxxxx",
connectString:"xxxxxx/xxxxx",
synchronize: true,
namingStrategy: new OracleNameStrategy(),
entities: [require("./entity")],
})
参考资料
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/Database-Object-Names-and-Qualifiers.html#GUID-75337742-67FD-4EC0-985F-741C93D918DA
https://stackoverflow.com/questions/59164738/createquerybuilder-does-not-return-data-with-oracle-because-typeorm-generates-sq