これは少し長くなるかもしれませんが、説明すべき奇妙な問題がたくさんあります。
クエリの実行時に表示されるエラー メッセージは次のとおりです。
"stacktrace": [
"SyntaxError: Arg string terminates parameters early",
" at new Function (<anonymous>)",
" at Function.createFunction (/Users/zacktidwell/repos/services/graphql/node_modules/@mikro-orm/core/utils/Utils.js:611:52)",
" at ObjectHydrator.getEntityHydrator (/Users/zacktidwell/repos/services/graphql/node_modules/@mikro-orm/core/hydration/ObjectHydrator.js:221:40)",
" at ObjectHydrator.hydrate (/Users/zacktidwell/repos/services/graphql/node_modules/@mikro-orm/core/hydration/ObjectHydrator.js:23:30)",
" at EntityFactory.hydrate (/Users/zacktidwell/repos/services/graphql/node_modules/@mikro-orm/core/entity/EntityFactory.js:82:27)",
" at EntityFactory.create (/Users/zacktidwell/repos/services/graphql/node_modules/@mikro-orm/core/entity/EntityFactory.js:36:14)",
" at MongoEntityManager.find (/Users/zacktidwell/repos/services/graphql/node_modules/@mikro-orm/core/EntityManager.js:100:52)",
" at runMicrotasks (<anonymous>)",
" at processTicksAndRejections (internal/process/task_queues.js:94:5)",
" at async EntityLoader.populateMany (/Users/zacktidwell/repos/services/graphql/node_modules/@mikro-orm/core/entity/EntityLoader.js:127:22)",
" at async EntityLoader.populateField (/Users/zacktidwell/repos/services/graphql/node_modules/@mikro-orm/core/entity/EntityLoader.js:187:9)",
" at async EntityLoader.populate (/Users/zacktidwell/repos/services/graphql/node_modules/@mikro-orm/core/entity/EntityLoader.js:37:13)",
" at async MongoEntityManager.lockAndPopulate (/Users/zacktidwell/repos/services/graphql/node_modules/@mikro-orm/core/EntityManager.js:630:9)",
" at async MongoEntityManager.findOne (/Users/zacktidwell/repos/services/graphql/node_modules/@mikro-orm/core/EntityManager.js:244:9)",
" at async queryName
]
このエラーは、私が設定した埋め込みオブジェクトが原因であると 95% 確信しています。エンティティの例を次に示します。
export class Properties extends BaseEntity {
@Embedded({ entity: () => Address, object: true })
address = new Address();
@Property()
market: string;
@Embedded({
entity: () => Metadata,
array: true,
object: true,
nullable: true,
})
details: Metadata[] = [];
@Embedded({
entity: () => Metadata,
array: true,
object: true,
nullable: true,
})
features: Metadata[] = [];
constructor({address, market }) {
super();
this.address = address;
this.market = market;
}
}
そして、配列の Embeddable :
@Embeddable()
export class Metadata {
@Property()
id?: string;
@Property()
metaKey?: string;
@Property()
metaValue?: string;
@Property()
createdAt?: string;
}
私が頭を悩ませている奇妙なこと:
このエラーは一貫性がありません。まったく同じクエリであっても、クエリを実行した最初の関係で発生する場合もあれば、3 番目の関係で発生する場合もあります。
これは、人間関係で最も一般的に発生します。クエリのメイン エンティティである場合、エラーはほとんど発生しません。エンティティにクエリを実行すると問題なく動作しますが、元のエンティティを関係として別のエンティティにクエリを実行すると、うまくいきません。
他のクエリを壊しているようです。あるクエリを実行すると動作しますが、別のクエリを実行すると動作しません。逆にすると、同じことが起こり、最初のクエリは機能し、2 番目のクエリは機能しません。
いくつかの埋め込み可能オブジェクトを削除すると「修正」されますが、どの埋め込み可能オブジェクトかは問題ではありません。それを壊すのは、必ずしも特定のものではなく、より多くの埋め込みオブジェクトのようです。(10 個の異なる埋め込み可能オブジェクトがあり、エンティティには最大 8 個の埋め込み埋め込み可能オブジェクトと、異なるフィールド用の同じ埋め込み可能オブジェクトが最大 5 個含まれます)
埋め込みオブジェクトを作成または初期化するさまざまな方法を試しました。
@Embedded({ entity: () => Metadata, array: true, object: true, nullable: true, }) details = new Metadata(); @Embedded({ entity: () => Metadata, array: true, object: true, nullable: true, }) details?: Metadata; @Embedded({ entity: () => Metadata) details?: Metadata[]; // and various combinations of {array: true} and {object: true}
提案をありがとう