Trying to make OneToMany
and ManyToOne
relationship with TypeORM but I get this error, I don't know what's wrong with my code.
I have the following User entity:
import { BaseEntity, Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
import { Field, ID, ObjectType } from 'type-graphql';
import { Role } from './';
@ObjectType()
@Entity()
export class User extends BaseEntity {
@Field(() => ID)
@PrimaryGeneratedColumn()
public id: number;
@Field()
@Column('text', { unique: true })
public userName: string;
@Column()
public password: string;
@Field()
@Column('boolean', { default: true })
public isActive: boolean;
@ManyToOne(() => Role, role => role.users)
@Field(() => Role, { nullable: true })
public role: Role;
}
Role entity:
import { BaseEntity, Column, Entity, OneToMany, PrimaryGeneratedColumn } from 'typeorm';
import { Field, ID, ObjectType } from 'type-graphql';
import { User } from '.';
@ObjectType()
@Entity()
export class Role extends BaseEntity {
@Field(() => ID)
@PrimaryGeneratedColumn()
public id: number;
@Field()
@Column('text', { unique: true })
public name: string;
@OneToMany(() => User, user => user.role, { lazy: false })
@Field(() => [User], { nullable: true })
public users: User[];
}
However I keep getting this error
(node:4541) UnhandledPromiseRejectionWarning: Error: Entity metadata
for Role#users was not found. Check if you specified a correct entity
object and if it's connected in the connection options. [1] at
/node_modules/typeorm/metadata-builder/EntityMetadataBuilder.js:571:23
[1] at Array.forEach (<anonymous>) [1] at
EntityMetadataBuilder.computeInverseProperties
(/node_modules/typeorm/metadata-builder/EntityMetadataBuilder.js:567:34)
[1] at
/node_modules/typeorm/metadata-builder/EntityMetadataBuilder.js:80:74
[1] at Array.forEach (<anonymous>) [1] at
EntityMetadataBuilder.build
(/node_modules/typeorm/metadata-builder/EntityMetadataBuilder.js:80:25)
[1] at ConnectionMetadataBuilder.buildEntityMetadatas
(/node_modules/typeorm/connection/ConnectionMetadataBuilder.js:57:141)
[1] at Connection.buildMetadatas
(/node_modules/typeorm/connection/Connection.js:494:57)
[1] at Connection.<anonymous>
(/node_modules/typeorm/connection/Connection.js:126:30)
[1] at step
(/node_modules/tslib/tslib.js:136:27) [1]
(node:4541) UnhandledPromiseRejectionWarning: Unhandled promise
rejection. This error originated either by throwing inside of an async
function without a catch block, or by rejecting a promise which was
not handled with .catch(). (rejection id: 1) [1] (node:4541) [DEP0018]
DeprecationWarning: Unhandled promise rejections are deprecated. In
the future, promise rejections that are not handled will terminate the
Node.js process with a non-zero exit code.
I am using NestJS with PostgreSQL and I had the same issue. The problem was by me is that I forgot to import the entity in the module with the TypeOrmModule.forFeature
function.
@Module({
imports: [TypeOrmModule.forFeature([Users, ...])], <--- Importing the entity!
controllers: [...],
providers: [...],
exports: [...],
})
This just means that your entities are either not loading, or are loading incorrectly
You need to fix the loading of your entities. Entities will usually be loaded from the ormconfig.js
file
Just create a file ormconfig.js
and type something like this, emphasis on the entities
module.exports = {
"name": "default",
"type": "mongodb",
"host": "localhost",
"port": "27017",
"username": "root",
"password": "",
"database": "rocketlaunches",
"entities": [
__dirname + "entities/**/*.entity.ts"
]
}
Now obviously, you would load your entities from wherever they are on your project
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With