undeexcepturi
Version:
TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.
115 lines (87 loc) • 2.48 kB
text/typescript
import {
Entity,
LoadStrategy,
ManyToOne,
OneToOne,
OptionalProps,
PrimaryKey,
Property,
Ref,
Unique,
} from '@mikro-orm/core';
import { MikroORM } from '@mikro-orm/sqlite';
()
export class User {
()
id!: number;
()
()
username!: string;
({ entity: () => Profile, mappedBy: (profile: Profile) => profile.user, nullable: true })
profile!: Ref<Profile> | null;
[OptionalProps]?: 'profile';
}
()
export class Profile {
()
id!: number;
({ entity: () => User, inversedBy: user => user.profile, owner: true, hidden: true })
user!: User;
()
name!: string;
}
()
export class Session {
()
id!: number;
()
token!: string;
({ entity: () => User })
user!: User;
}
let orm: MikroORM;
test('GH #4675', async () => {
orm = await MikroORM.init({
entities: [Session],
dbName: ':memory:',
});
await orm.schema.createSchema();
const user = await orm.em.insert(User, { username: 'username' });
await orm.em.insert(Session, { token: 'abc123', user });
const session1 = await orm.em.findOneOrFail(Session, { token: 'abc123' }, {
populate: ['user', 'user.profile'],
strategy: LoadStrategy.SELECT_IN,
disableIdentityMap: true,
});
expect(session1.user.profile).toBeNull();
const session2 = await orm.em.findOneOrFail(Session, { token: 'abc123' }, {
populate: ['user', 'user.profile'],
strategy: LoadStrategy.JOINED,
disableIdentityMap: true,
});
expect(session2.user.profile).toBeNull();
await orm.close();
});
test('GH #4675 (forceUndefined: true)', async () => {
orm = await MikroORM.init({
entities: [Session],
dbName: ':memory:',
forceUndefined: true,
});
await orm.schema.createSchema();
const user = await orm.em.insert(User, { username: 'username' });
await orm.em.insert(Session, { token: 'abc123', user });
const session1 = await orm.em.findOneOrFail(Session, { token: 'abc123' }, {
populate: ['user', 'user.profile'],
strategy: LoadStrategy.SELECT_IN,
disableIdentityMap: true,
});
expect(session1.user.profile).toBeUndefined();
const session2 = await orm.em.findOneOrFail(Session, { token: 'abc123' }, {
populate: ['user', 'user.profile'],
strategy: LoadStrategy.JOINED,
disableIdentityMap: true,
});
expect(session2.user.profile).toBeUndefined();
await orm.close();
});