繁体   English   中英

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

[英]How do you create relationship between two elements in Java?

我将尝试清楚地解释我的问题:我有两个表:document和category,它们之间存在多对多关系。 我正在用Java优雅地学习编程,所以请原谅我的无知。

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

我创建了一个班级文档和一个班级类别; 我是否需要添加Category的ArrayList作为Class Document的属性? 还有一个文档的ArrayList作为Category中的属性?

我还需要对某些文档进行修改,是否需要在类文档中创建属性ID,以便将表中的ID存储在DB中,以便更轻松地进行更新?

我的班级文档可能看起来像:

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是什么,我不知道。

我是否需要添加Category的ArrayList作为Class Document的属性? 还有一个文档的ArrayList作为Category中的属性?

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

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

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

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

,那么只有一个列表就足够了。 在这种情况下,您可以将这些类之间的关系称为单向的。 如果同时需要两种方式,则需要两个列表。 在这种情况下,您的关系船是双向的。 无论如何,如果单向关系就足够了,则您最好选择一个关系,因为在这种情况下不必使两个列表保持同步。


我还需要对某些文档进行修改,是否需要在类文档中创建属性ID,以便将表中的ID存储在DB中,以便更轻松地进行更新?

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


正如您所说的,您正在学习Java时,我想补充一些一般性说明:

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

private ArrayList<String> category;

您应该首选接口List而不是此处的具体实现类ArrayList。

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

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

另外,我想提及的是,有许多可用的框架支持将数据库内容映射到Java对象。 因此,如果必须执行许多映射,则绝对应该考虑使用其中一种映射(例如,休眠)。

如果您使用的是Hibernate之类的ORM,则可以使用ArrayList<Category>代替字符串。 那将是更纯正的OOP方法。 不知道为什么将其标记为MVC。

托马斯的答案很好。 我只想补充一点,如果您要建立双向关系,则需要小心以确保双方的合作伙伴列表保持一致。

文森特·帕廷顿(Vincent Partington)对此发表一篇很好的文章 他是从为JPA编写对象的角度来编写的,但是他描述的模式(使用internal*方法)完全适用于普通对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM