Search code examples
node.jstypescriptpostgresqlmikro-orm

How to resolve "Please provide either 'type' or 'entity' attribute in EntityName.id" error when creating migration in MikroORM?


I've been following Ben Awad Fullstack tutorial and have run into an issue. So, I have installed MikroORM and am using PostgreSQL database. The problem is that npx mikro-orm migration:create command returns the following error:

Error: Please provide either 'type' or 'entity' attribute in Post.id
    at ReflectMetadataProvider.initPropertyType (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\ReflectMetadataProvider.js:14:19)
    at F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\ReflectMetadataProvider.js:9:54
    at ReflectMetadataProvider.initProperties (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\MetadataProvider.js:26:23)
    at ReflectMetadataProvider.loadEntityMetadata (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\ReflectMetadataProvider.js:9:20)
    at MetadataDiscovery.discoverEntity (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\MetadataDiscovery.js:182:41)
    at MetadataDiscovery.discoverReferences (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\MetadataDiscovery.js:131:24)
    at MetadataDiscovery.findEntities (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\MetadataDiscovery.js:71:20)
    at MetadataDiscovery.discover (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\MetadataDiscovery.js:34:9)
    at Function.init (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\MikroORM.js:40:24)

I have created Post entity that looks like this:

import { Entity, PrimaryKey, Property } from "@mikro-orm/core";

@Entity()
export class Post {
    @PrimaryKey({ type: "number" })
    id!: number;

    @Property()
    createdAt = new Date();

    @Property({ onUpdate: () => new Date() })
    updatedAt = new Date();

    @Property()
    title!: string;
}

I have also created config file for MikroORM like so:

import { __prod__ } from "./constants";
import { Post } from "./entities/Post";
import { MikroORM } from "@mikro-orm/core";
import path from "path";

export default {
    migrations: {
        path: path.join(__dirname, "./migrations"),
        pattern: /^[\w-]+\d+\.[tj]s$/,
    },
    entities: [Post],
    dbName: "redditclone",
    type: "postgresql",
    debug: !__prod__,
    user: "postgres",
    password: "postgres",
} as Parameters<typeof MikroORM.init>[0];

It's all being put together in the index.ts script:

import { MikroORM } from "@mikro-orm/core";
import { __prod__ } from "./constants";
import { Post } from "./entities/Post";
import microConfig from "./mikro-orm.config";

const main = async () => {
    const orm = await MikroORM.init(microConfig);

    const post = orm.em.create(Post, { title: "my first post" });
    await orm.em.persistAndFlush(post);
};

main();

I've tried changing the Post entity id to uuid and adding the corresponding object parameter to the @PrimaryKey decorator but the error stays the same. At the moment I am only using MikroORM and ts-node dependecies. Thanks in advance.


Solution

  • I've actually fixed it. It looks like the typescript didn't compile correctly so I deleted Post.js file from the src folder and when I compiled it again it seems to work as expected.