gpt4 book ai didi

java - 具有 Where 约束的 SecondaryTable

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:22 25 4
gpt4 key购买 nike

在我的场景中最好的解决方案是什么?

我有一个滞后数据库,想通过使用单个 hibernate 实体来访问数据。我希望 Java 部分尽可能简单。

我的数据库由三个表组成:

  1. 表 1(id​​,Att1,Att2)
  2. 表 2(id,Att3)
  3. Table3(id,current,Att4)

我像这样使用 @SecondaryTable 匿名:

@Entity
@Table(name = "Table1")
@SecondaryTables({
@SecondaryTable(name = "Table2", pkJoinColumns = @PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id")),
@SecondaryTable(name = "Table3", pkJoinColumns = @PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id"))
})
public class Entity implements Serializable {
int id;
int Att1;
int Att2;
int Att3;
int Att4;
}

这对 Table2Att3 完全有效。但是,在表 3 中,如果 current = true,我只需要 Att4。假设旧版本的 Att4 保存在 Table3 中。这可以通过 @SecondaryTable 完成,还是我需要其他方法?我更愿意保留一个实体,而不是通过创建一个不必要的 Table3 实体来使用 @OneToMany。

最佳答案

如何将 current 添加到您的实体?

public class Entity implements Serializable {
int id;
int Att1;
int Att2;
int Att3;
int Att4;
byte current;
}

从另一方面来说,如果您寻求这里的最佳解决方案,我会在 SQL Server 中进行更改。由于这一点,您将获得最大的性能优势,因为 SQL Server 基数估计器将能够创建最佳执行计划。这将限制在转换中浪费的不必要的 SQL Server 事务的数量以及应用程序和数据库之间传输的数据量。您需要做的就是在 SQL Server 端:

CREATE VIEW [YourEntityOnDB]
AS
SELECT t1.[id], t1.[Att1], t1.[Att2], t2.[Att3], t3.[Att4]
FROM [Table1] t1
JOIN [Table2] t2 ON t1.[id] = t2.[id]
JOIN [Table3] t3 ON t1.[id] = t3.[id]
WHERE t3.[current] = 1;

并且您的 JAVA 部分将尽可能简单,因为 [YourEntityOnDB] 将是您调用的唯一对象,它将包含所有 id、Att1、Att2、Att3、Att4 和当前= 1 其中。最重要的是,根据数据的唯一性和您的需求,您可以应用一些索引(甚至索引您的新 View )以使其运行得更快。在最近的版本(SQL Server 2014+)中,甚至有内存选项可以在需要时快速点亮。应用程序和数据库上有许多选项可以达到同一点,但这主要取决于您的需求和公司标准。我见过一些公司,其中与数据关系有关的一切都是应用程序驱动的,还有一些公司的一切都与性能有关。

关于java - 具有 Where 约束的 SecondaryTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51656305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com