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でプロパティを初期化する方法があります。

このように、必要なプロパティだけをコンストラクタで設定して、その他の値は後からエンティティに割り当てることで問題ありません。

注意点:

  • 自動生成プロパティの扱い: idcreatedAtなど、データベースで自動生成されるプロパティはコンストラクタで設定しないでください。
  • TypeORMの内部処理への影響: コンストラクタの実装がTypeORMのエンティティの読み込みや保存機能に影響を与えないように注意してください。

まとめ:

  • コンストラクタには、エンティティ生成時に必要なプロパティのみを設定します。
  • 後からデータベースに挿入または更新する値は、コンストラクタで設定しなくて構いません。
  • Object.assignを使用して、初期化オブジェクトからプロパティを割り当てる方法などもあります。

https://zenn.dev/naonao70/articles/f0399d2baf05cc

まさぴょんまさぴょん

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
}

https://qiita.com/takezoux2/items/83804a7a5b7da3bee874