首页 > 解决方案 > 将 Spring Data JPA 与存储在 MySQL 数据库中的邻接矩阵一起使用

问题描述

我是使用 Spring Data Jpa 的新手,但我知道通常会在 Java 中创建一个“模型”/“实体”类,它代表数据库表中的一行数据。当我有一个具有 3 列/类属性的小表时,这对我来说很有意义,但是对于具有 100 列的表的情况呢?很难创建具有 100 个属性的“模型”类?我问这个的原因是因为我在 MySQL 数据库表中存储了一个大型的火车站邻接矩阵。我想在我的 Java Spring 应用程序中与这些数据进行交互,但无法理解如何做到这一点。

我对这样一个事实持开放态度,即我可能错误地存储了数据,或者在这种情况下根本不应该使用 Spring Data JPA。任何建议将不胜感激!

谢谢。

MySQL中我的部分邻接矩阵表的屏幕截图

编辑:

我将尝试更清楚地解释我正在尝试做的事情。我想基本上将这个“站”(邻接矩阵)数据库表的副本导入到我的 Java Spring 应用程序中。我不知道如何最好地执行此“导入”,或者将表存储在什么 Java 数据结构中。我希望能够在 Java 中对数据运行一次像 BFS 这样的算法。

表中的数据是显示火车网络图的邻接矩阵。“1”表示车站由轨道连接,“0”表示没有连接。

标签: javamysqlspringspring-data-jpaadjacency-matrix

解决方案


如果您的模型真正用一百个属性表示,那么是的,您可以创建一个具有一百个属性的实体。但我认为您的模型需要重新设计,因为按照我的看法,插入新记录需要更改架构。

由于我不知道这些列代表什么,我将假设它们可能是下一站和上一站?这将是一个简单的模型来表示这一点。

@Entity
@Table(name = "station")
@Getter
@Setter
public class Station {

   @Id
   private Long id;

   @Column(name = "name")
   private String name;

   @OneToOne
   @JoinColumn(name = "previous_station_id")
   private Station previous;

   @OneToOne
   @JoinColumn(name = "next_station_id")
   private Station next;
}

您的 DDL 将如下所示:

create table station
(
    id                  bigint auto_increment,
    name                varchar(255) null,
    previous_station_id bigint       null,
    next_station_id     bigint       null,
    constraint station_id_uindex
        unique (id),
    constraint station_station_id_fk
        foreign key (previous_station_id) references station (id),
    constraint station_station_id_fk_2
        foreign key (next_station_id) references station (id)
);

create index station_next_station_id_index
    on station (next_station_id);

create index station_previous_station_id_index
    on station (previous_station_id);

alter table station
    add primary key (id);

因为这个表实际上有返回给自己的键,所以您首先插入一个没有上一个或下一个集合的站,然后您将更新记录以设置这些值。如果我不了解这些值是什么,请更新您的问题以更好地描述您要建模的内容以获得更准确的答案。


推荐阅读