Open4
TypeORMでのEntity定義について
TypeORMでのEntity定義について
TypeORMのEntityクラスのコンストラクタには、エンティティのインスタンス化に必要なプロパティの初期値を設定します。
自動生成されるIDやタイムスタンプなどはコンストラクタで設定する必要はありません。
以下は一般的なコンストラクタの実装例です:
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column({ nullable: true })
status?: string; // 後から設定するプロパティ
constructor(init?: Partial<User>) {
Object.assign(this, init);
}
}
// インスタンス生成時
const user = new User({ name: 'Taro' });
// 後からプロパティを設定
user.status = 'active';
このように、コンストラクタでPartial<User>
型のオブジェクトを受け取り、Object.assign
でプロパティを初期化する方法があります。
このように、必要なプロパティだけをコンストラクタで設定して、その他の値は後からエンティティに割り当てることで問題ありません。
注意点:
-
自動生成プロパティの扱い:
id
やcreatedAt
など、データベースで自動生成されるプロパティはコンストラクタで設定しないでください。 - TypeORMの内部処理への影響: コンストラクタの実装がTypeORMのエンティティの読み込みや保存機能に影響を与えないように注意してください。
まとめ:
- コンストラクタには、エンティティ生成時に必要なプロパティのみを設定します。
- 後からデータベースに挿入または更新する値は、コンストラクタで設定しなくて構いません。
-
Object.assign
を使用して、初期化オブジェクトからプロパティを割り当てる方法などもあります。
TypeOrmでカラム単位またはテーブル単位でCHARSET, COLLATEの設定
テーブル単位で設定
import { Column, Entity } from "typeorm"
@Entity({
engine: "InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin"
})
export class User {
@Column()
username!: string
// DefaultのCharset以外にする場合は、collationの設定必要
@Column({
charset: "ascii",
collation: "ascii_bin"
})
password!: string
}
多対1, 1対多
Unique Key制約の設定について