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 int
和 linkedObjectName 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.
中列的名称
此解决方案并未声称是最正确的解决方案 - 它只是有效。
我的目标是用 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 int
和 linkedObjectName 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.
此解决方案并未声称是最正确的解决方案 - 它只是有效。