Skip to content

save both relations {typeorm}

Photo 엔티티와 관련된 PhotoMetadata 엔티티를 저장하면서 두 엔티티 간의 관계를 올바르게 설정하는 방법입니다.

단계:#

  1. 엔티티 인스턴스화:
  2. 먼저 PhotoPhotoMetadata 엔티티의 인스턴스를 생성합니다:

    const photo = new Photo();
    const metadata = new PhotoMetadata();
    
  3. 이 엔티티들은 데이터베이스에 저장될 데이터를 나타냅니다.

  4. 레포지토리 가져오기:

  5. 각각의 엔티티에 대해 데이터베이스 작업을 처리하는 레포지토리를 가져옵니다:

    const photoRepository = AppDataSource.getRepository(Photo);
    const metadataRepository = AppDataSource.getRepository(PhotoMetadata);
    
  6. Photo 엔티티를 먼저 저장:

  7. 순서가 중요한 이유: PhotoMetadata 엔티티는 관계를 통해 Photo를 참조할 수 있습니다. 따라서, Photo를 먼저 저장하면 데이터베이스에서 유효한 ID(예: 기본 키)가 생성되며, 이를 통해 PhotoMetadata가 올바르게 참조할 수 있습니다.
  8. photo 엔티티를 데이터베이스에 저장합니다:

    await photoRepository.save(photo);
    
  9. 그 다음 PhotoMetadata 엔티티 저장:

  10. photo가 성공적으로 저장된 후, 이제 PhotoMetadata 엔티티를 저장합니다:

    await metadataRepository.save(metadata);
    
  11. 이 시점에서 PhotoPhotoMetadata 간의 관계를 저장된 photo 인스턴스를 사용해 완전히 설정할 수 있습니다.


순서의 중요성: - 엔티티 간의 의존성: PhotoMetadata 엔티티는 종종 Photo 엔티티에 의존하여 관계를 설정합니다. 예를 들어, PhotoMetadataPhoto를 참조하는 외래 키를 가지고 있다면, 관계를 저장하기 전에 Photo가 데이터베이스에 존재해야 합니다. - 잠재적 오류: 이 순서를 반대로 하면 외래 키 제약 위반 또는 PhotoMetadata 엔티티에서 null 참조와 같은 문제가 발생할 수 있습니다.

위와 같은 순서를 따름으로써, PhotoMetadata 엔티티가 저장된 Photo 엔티티를 올바르게 참조할 수 있도록 보장할 수 있습니다.