簡単なテーブルを作成しました:
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"
@Entity()
export class Test {
@PrimaryGeneratedColumn()
public id!: number
@Column({ nullable: false })
public name!: string
@Column({ nullable: false, type: "float" })
public price!: number
}
マイグレーションを生成して実行します。データベースにデータがなく、サーバーを実行すると成功します。しかし、データベースに1行追加して再度実行すると、次のエラーが表示されます。
QueryFailedError: the column «price» contain null values
データベースには、すべてのデータを含む行が明確に含まれています。私は多くのケースを試しましたが、どれも正しくありませんでした。
誰かそれについて何かアイデアはありますか?
同様の問題があり、 this thread の下部に報告しました。
おそらくsynchronize: true
ORM構成で。このため、アプリを実行するたびにTypeormはテーブルを作成しようとし、データがある場合は誤解を招くエラーをスローします。
ここ から:
synchronize-アプリケーションが起動するたびにデータベーススキーマを自動作成するかどうかを示します。このオプションに注意し、本番環境では使用しないでください。そうしないと、本番データが失われる可能性があります。このオプションは、デバッグおよび開発中に役立ちます。代わりに、CLIを使用してschema:syncコマンドを実行できます。 MongoDBはスキーマレスであるため、MongoDBデータベースの場合はスキーマを作成しないことに注意してください。代わりに、インデックスを作成するだけで同期します。
私はこの実体を持っていました
import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id!: number;
@Column('text')
firstName!: string;
}
「列 "firstName"にnull値が含まれています」というエラーが表示されました。そこで、@ pleerockがここで提案したように{nullable:true}を追加しました https://github.com/typeorm/typeorm/issues/845 と動作しました。
import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id!: number;
@Column('text', {nullable: true})
firstName: string;
}
nullable
宣言を削除した場合、またはtrue
に設定した場合...
次に、 class-validator の検証デコレータを使用してnullable
チェックを実行できます。