Hibernate - 数据库结构建模

Hibernate - DataBase structure modelling

我的目标是用 table filesData 制作数据库结构,其中将存储有关上传文件的信息,另一个 tables 用于另一个对象。

一些对象可以链接到文件数据table,例如table博客posts、新闻等。这些对象中的每一个都必须有许多链接文件.比如newspost可以有很多张图片。在这种情况下应该对每个类型使用 "middle" tables,即对于新闻 post 应该是 3 tables: NewsTable, NewsToFilesRelationsTable, filesData。这是标准方式。

但现在我想构建另一种方式:我想制作 setter 方法来设置每个对象的文件集,其中包含文件链接,并使用自定义元注释对该方法进行注释:

@MyFileAnnotation
public void setFiles(Set<FilesData> fd) {
        this.fd= fd;
}

但是如何存储这些数据呢?我不想制作 "middle" tables,对象与文件数据 table 中的文件记录的关系。另一种变体 - 创建一个 table filesDataRelation 并将关系数据存储在此 table 中。在这种情况下 - 这个 table 必须是什么结构?这个 table 不仅必须有链接对象记录的 ID,还必须有带有对象数据类型的行(它可以是对象的全名 table)。

如何构建这种方式?

如果您不想使用另一个 table,那么我认为没有更好的方法可以做到这一点。也许您想考虑使用一些 NoSQL 数据库?我最近在我的最新项目中做到了这一点。一些数据存储在 Postres 中,其余数据存储在 MongoDB 中。有一个非常好的 java 库用于 Mongo 集成。检查 spring-data-mongodb

解决方法很简单。

我制作了 table framework_files 并使用 JPA 将其映射到对象 FrameworkFiles implements java.io.Serializable。此 table 有列 linkedObjectID intlinkedObjectName varchar(250)

在另一个 table 中,例如 - 在映射到 public class PublicSitePortfolioWorks implements java.io.Serializable { 的 table publicSitePortfolioWorks 中,有一些列和列 id int (PK)linkedObjectName varchar(250) .所有行(记录)中的列 linkedObjectName 都有一个(静态?)值,可能与 table 名称相同。例如:

编号 |一些列 |链接对象名称

1 |啦啦啦| publicSitePortfolioWorks

2 |啦啦啦| publicSitePortfolioWorks

3 |啦啦啦| publicSitePortfolioWorks

实体对象 PublicSitePortfolioWorks 的 table publicSitePortfolioWorks 链接到子 table 作为一对多代码

@JoinColumns({
        @JoinColumn(name = "linkedObjectID", referencedColumnName = "id"),
        @JoinColumn(name = "linkedObjectName", referencedColumnName = "linkedObjectName")
    })
    @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
    private List<FrameworkFiles> framework_files1 = new ArrayList<>();

其中 name = "linkedObjectID" - 它是子 table 中列的名称,referencedColumnName = "id" - 它是当前 table 中列的名称,name = "linkedObjectName" - 它是名称子 table 中的列数,referencedColumnName = "linkedObjectName" - 它是子 table.

中列的名称

此解决方案并未声称是最正确的解决方案 - 它只是有效。