gpt4 book ai didi

java - Hibernate:每个具体类的表与每个子类的表

转载 作者:太空宇宙 更新时间:2023-11-04 08:28:52 24 4
gpt4 key购买 nike

我正在为我当前的项目(Java)规划/设计我的数据库。对于这个项目,我将使用 hibernate。

在我的项目中,我有一个名为 Command 的基类/接口(interface)。事实上,Command 类只包含一个字段 id(唯一)。

public interface Command {
public int getId();
public void execute();
}

所以Command的每个子类的共同点是一个唯一的id和一个名为execute的方法,该方法由子类实现。

存在许多子类,如 MoveCommand、ResizeCommand 等,它们没有公共(public)数据字段(除了 id)。

例如:

public class MoveCommand implements Command {
private int id;
private int oldX;
private int oldY;
private int newX;
private int newY;
public void execute() { ... }
public int getId(){return id; }
}

public class ResizeCommand implements Command {
private int id;
private int oldWidth;
private int oldHeight;
private int newWidth;
private int newHeight;
public int getId(){return id; }
public void execute() { ... }
}

然后我有另一个名为 Document 的类,其中包含命令列表

public class Document {
private List<Command> commands;
}

因此基类“select from Command”的很多查询都是在运行时执行的。

我的问题是:在这种情况下我应该使用什么样的继承策略才能获得最佳性能。

在 SQL 中:在这种情况下,JOIN(每个子类表)或 UNION(每个具体类表)性能更好吗?

有人对这个主题有经验吗?

我猜每个子类一个表将是更好的(设计)解决方案,但我不确定,因为会存在一个具有单列(id)的数据库表,因为这是命令唯一的共同点。

最佳答案

我希望联合策略更快,因为它需要更少的连接,但这实际上取决于您的应用程序的功能。由于基表除 ID 之外不包含任何其他列,因此它实际上并没有多大用处。

两种方法之间的差异主要与标准化有关。连接策略允许为层次结构中的任何类(甚至基类)定义外键,而联合策略仅允许为具体类定义外键。这可能是文档和命令之间的联接表的问题。联合策略还意味着公共(public)列的重复,但在您的情况下没有任何公共(public)列,因此这并不是真正的问题。

关于java - Hibernate:每个具体类的表与每个子类的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7945787/

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