java - 如何在 Java 中创建两个元素之间的关系?

标签 java oop orm

我会尽力清楚地解释我的问题: 我有两个表:文档和类别,它们具有多对多关系。我正在学习用 Java 进行优雅的编程,所以请原谅我的无知。

我正在数据库中进行搜索,当我从结果集中创建对象时,我想说明检索到的元素(文档)及其类别之间的相同关系。

我已经创建了一个类(class)文档和一个类(class)类别;我是否需要添加类别的ArrayList作为类文档的属性?文档的 ArrayList 作为类别中的属性?

我还需要对一些文档进行修改,我是否需要在类文档中创建一个属性id,以便将表中的id存储在数据库中,以便更新更容易?

我的类文档可能如下所示:

public class Document {
    private Integer id; // Id from DB, 0 if new object
    private String name;
    private String url;
    private Date dateCreated;
    private ArrayList<String> category;

    // getters & setters...
}

这可能会令人困惑,但我只想以“标准”方式进行操作!我知道如何通过使用多个查询等以“肮脏”的方式完成所有这些...但我再次需要经验丰富的面向对象开发人员的想法!

编辑: 我删除了MVC; 我是 Java 新手,所以我只使用基本的 Java (无 ORM,无框架)。我不知道 Hibernate 是什么,我正在研究。

最佳答案

Do I need to add an ArrayList of Category as an attribute of Class Document? And an ArrayList of Document as attribute in Category?

这取决于您想要访问对象的方式。如果您的用例通过文档访问类别就足够了

document1.getCategories().get(0)...

并且您不需要通过这样的类别访问文档

category1.getDocuments().get(0)...

,那么有一个列表就足够了。在这种情况下,您可以将这些类之间的关系称为单向的。如果两种方式都需要,则需要两个列表。在这种情况下,你们的关系是双向的。无论如何,如果单向关系就足够了,您应该更喜欢这种关系,因为在这种情况下您不必保持两个列表同步。

<小时/>

I also need to do modifications on some Documents, do I need to create an attribute id in Class Document so store the id from the table in DB so that the update is easier?

这是某种设计问题。在大多数情况下,包含代理数据库键是有意义的,因为它将使执行更新变得更容易。无论如何,如果您的对象可以通过其他属性(例如名称)或这些属性的组合来标识,那么当然不需要包含代理键。

<小时/>

正如您所说,您正在学习 Java,我想添加一些一般性评论:

您已在示例中声明了该列表,如下所示:

private ArrayList<String> category;

您应该更喜欢 List 接口(interface),而不是这里的具体实现类 ArrayList。

private List<String> category = new ArrayList<String>();

这将允许您使用任何类型的实现(例如 ArrayList 或 LinkedList),因为您的代码不再依赖于具体的实现类。

此外,我想提一下,有许多可用的框架支持将数据库内容映射到 Java 对象。因此,如果您必须进行大量映射,那么您绝对应该考虑使用其中之一(例如 hibernate)。

关于java - 如何在 Java 中创建两个元素之间的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9419192/

相关文章:

java - 使用 java swing 创建与 Oracle 10g 的 JDBC 连接

java - TestNg 注释语法

java - 在 fragment 之间共享代码

sql-server - SQL Server 的 ORM 推荐

node.js - Sails ORM(Waterline)回调中的自定义错误

php - 是否有任何为 PHP 编写的 Micro-ORM

java - 使用 GridLayout、JPanel、BorderLayout

java - 从另一个类添加到 ArrayList

java - JPA ORM 的 Java DTO 的对象建模父/子关系

oop - 使用接口(interface)的真正好处是什么?