質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

0回答

881閲覧

nullable: true で cascade Insert したい (typeorm)

tktcorporation

総合スコア108

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2019/08/02 05:06

前提

  • node 10.x
  • typescript 3.5.3
  • typeorm 0.2.18
  • mysql 5.7

実現したいこと

typeormで
OneToOne or OneToMany のカラムを nullable: false にする。
その上で cascade Insert, Update したい。

発生している問題・エラーメッセージ

QueryFailedError: ER_BAD_NULL_ERROR: Column 'device_id' cannot be null

該当のソースコード

index.ts

typescript

1// index.ts 2 3import {getRepository} from 'typeorm'; 4import {Parent} from ''; 5import {Child} from ''; 6 7const testCreate = async () => { 8 const parentRepository = getRepository(Parent); 9 10 const parent = new Parent(); 11 const child = new Child(); 12 13 parent.children = [child]; 14 15 await parentRepository.save(parent); 16} 17

child.ts

typescript

1// child.ts 2 3import { 4 Entity, 5 PrimaryGeneratedColumn, 6 Column, 7 BaseEntity, 8 ManyToOne, JoinColumn, CreateDateColumn, UpdateDateColumn } from 'typeorm'; 9import { PrimaryGeneratedColumnUUIDOptions } from 'typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions'; 10import { Parent } from './parent'; 11 12@Entity('CHILD') 13export class Child extends BaseEntity { 14 @PrimaryGeneratedColumn('uuid') 15 public readonly id?: PrimaryGeneratedColumnUUIDOptions; 16 17 @ManyToOne( 18 (type) => Parent, 19 (parent) => parent.children, 20 { nullable: false }, 21 ) 22 @JoinColumn({ name: 'parent_id' }) 23 public parent!: Parent; 24 25 @CreateDateColumn({ name: 'created_at', type: 'timestamp' }) 26 public readonly createdAt?: Date; 27 28 @UpdateDateColumn({ name: 'updated_at', type: 'timestamp' }) 29 public readonly updatedAt?: Date; 30 31 constructor( 32 fields: { 33 parent?: Parent, 34 }, 35 ) { 36 super(); 37 Object.assign(this, fields); 38 } 39 40}

parent.ts

typescript

1import { 2 Entity, 3 PrimaryGeneratedColumn, 4 Column, 5 BaseEntity, 6 OneToMany, CreateDateColumn, UpdateDateColumn } from 'typeorm'; 7import { child } from './child'; 8 9@Entity('PARENT') 10export class Parent extends BaseEntity { 11 @PrimaryGeneratedColumn({ type: 'bigint' }) 12 public readonly id?: number; 13 14 @CreateDateColumn({ name: 'created_at', type: 'timestamp' }) 15 public readonly createdAt?: Date; 16 17 @UpdateDateColumn({ name: 'updated_at', type: 'timestamp' }) 18 public readonly updatedAt?: Date; 19 20 @OneToMany( 21 (type) => Child, 22 (child) => child.parent, 23 { cascade: true }, 24 ) 25 public children?: Child[]; 26 27}

試したこと

childの { nullable: false } を外すと正常に動作する。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問