You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeORM V0.3中实现带连接表的一对一关联?

在TypeORM V0.3中实现指定数据库架构

下面是对应三个实体的TypeScript实现代码,完全匹配你给出的数据库架构:

1. ManagementServer 实体

import { Entity, PrimaryGeneratedColumn, Column, OneToOne } from "typeorm";
import { ManagementData } from "./ManagementData";

@Entity()
export class ManagementServer {
  @PrimaryGeneratedColumn("uuid")
  mgmtID: string;

  // 替换为你的实际管理服务器字段
  @Column()
  serverName: string;

  @Column()
  ipAddress: string;

  // 与 ManagementData 的一对一反向关联
  @OneToOne(() => ManagementData, (managementData) => managementData.managementServer)
  managementData: ManagementData;
}

2. DeviceData 实体

import { Entity, PrimaryGeneratedColumn, Column, OneToOne } from "typeorm";
import { ManagementData } from "./ManagementData";

@Entity()
export class DeviceData {
  @PrimaryGeneratedColumn("uuid")
  deviceDataID: string;

  // 替换为你的实际设备数据字段
  @Column()
  deviceName: string;

  @Column()
  deviceStatus: string;

  // 与 ManagementData 的一对一反向关联
  @OneToOne(() => ManagementData, (managementData) => managementData.deviceData)
  managementData: ManagementData;
}

3. ManagementData 实体

import { Entity, PrimaryColumn, Column, OneToOne, JoinColumn } from "typeorm";
import { ManagementServer } from "./ManagementServer";
import { DeviceData } from "./DeviceData";

@Entity()
export class ManagementData {
  // 主键同时作为 ManagementServer 的外键(一对一关联)
  @PrimaryColumn("uuid")
  mgmtID: string;

  // DeviceData 的外键(一对一关联)
  @Column("uuid")
  deviceDataID: string;

  // 关联 ManagementServer 实体,指定外键列与主键同名
  @OneToOne(() => ManagementServer)
  @JoinColumn({ name: "mgmtID" })
  managementServer: ManagementServer;

  // 关联 DeviceData 实体
  @OneToOne(() => DeviceData)
  @JoinColumn({ name: "deviceDataID" })
  deviceData: DeviceData;
}

关键说明

  • 主键外键复用:ManagementData 的 mgmtID 既是主键,又是关联 ManagementServer 的外键,通过 @PrimaryColumn 配合 @JoinColumn 实现这一关联逻辑。
  • UUID自动生成:ManagementServer 和 DeviceData 的主键使用 @PrimaryGeneratedColumn("uuid") 实现UUID的自动生成。
  • 一对一关系映射:三个实体间的一对一关联通过 @OneToOne 装饰器定义,反向关联通过 mappedBy 指定对应字段,保证双向关联的完整性。
  • 业务字段替换:代码中的示例字段(如 serverName、deviceName)请替换为你实际的业务字段。

内容的提问来源于stack exchange,提问作者Naor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:12:41