Skip to content

Commit

Permalink
fix(core): propagate unsetting of 1:1 from inverse side
Browse files Browse the repository at this point in the history
Closes #1872
  • Loading branch information
B4nan committed May 29, 2021
1 parent 34391cd commit 903d484
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 6 deletions.
14 changes: 9 additions & 5 deletions packages/core/src/entity/EntityHelper.ts
Expand Up @@ -116,26 +116,30 @@ export class EntityHelper {
return this.__data[prop.name];
},
set(val: AnyEntity | Reference<AnyEntity>) {
const entity = Reference.unwrapReference(val ?? this.__data[prop.name]);
this.__data[prop.name] = Reference.wrapReference(val as T, prop);
const entity = Reference.unwrapReference(val as T);
EntityHelper.propagate(entity, this, prop);
EntityHelper.propagate(entity, this, prop, Reference.unwrapReference(val));
},
enumerable: true,
configurable: true,
});
ref[prop.name] = val as T[string & keyof T];
}

private static propagate<T extends AnyEntity<T>, O extends AnyEntity<O>>(entity: T, owner: O, prop: EntityProperty<O>): void {
const inverse = entity && entity[prop.inversedBy || prop.mappedBy];
private static propagate<T extends AnyEntity<T>, O extends AnyEntity<O>>(entity: T, owner: O, prop: EntityProperty<O>, value?: O[keyof O]): void {
const inverse = value && value[prop.inversedBy || prop.mappedBy];

if (prop.reference === ReferenceType.MANY_TO_ONE && Utils.isCollection<O, T>(inverse) && inverse.isInitialized()) {
inverse.add(owner);
}

if (prop.reference === ReferenceType.ONE_TO_ONE && entity && entity.__helper!.__initialized && Reference.unwrapReference(inverse) !== owner) {
if (prop.reference === ReferenceType.ONE_TO_ONE && entity && entity.__helper!.__initialized && Reference.unwrapReference(inverse) !== owner && value != null) {
EntityHelper.propagateOneToOne(entity, owner, prop);
}

if (prop.reference === ReferenceType.ONE_TO_ONE && entity && entity.__helper!.__initialized && entity[prop.inversedBy || prop.mappedBy] != null && value == null) {
entity[prop.inversedBy || prop.mappedBy] = value;
}
}

private static propagateOneToOne<T, O>(entity: T, owner: O, prop: EntityProperty<O>): void {
Expand Down
2 changes: 1 addition & 1 deletion tests/bootstrap.ts
Expand Up @@ -95,7 +95,7 @@ export async function initORMPostgreSql(loadStrategy = LoadStrategy.SELECT_IN) {
dbName: `mikro_orm_test`,
baseDir: BASE_DIR,
type: 'postgresql',
debug: ['query'],
debug: ['query', 'query-params'],
forceUtcTimezone: true,
autoJoinOneToOneOwner: false,
logger: i => i,
Expand Down

0 comments on commit 903d484

Please sign in to comment.