Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中创建两个元素之间的关系?_Java_Oop_Orm - Fatal编程技术网

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

如何在Java中创建两个元素之间的关系?,java,oop,orm,Java,Oop,Orm,我会尽量清楚地解释我的问题: 我有两个表:document和category,它们有多对多的关系。我正在学习用Java优雅地编程,请原谅我的无知 我正在对数据库进行搜索,我想在从resultSet创建对象时说明检索到的元素(文档)及其类别之间的相同关系 我已经创建了一个类文档和一个类类别;是否需要添加类别的ArrayList作为类文档的属性?和文档的ArrayList作为类别中的属性 我还需要对一些文档进行修改,我是否需要在类文档中创建一个属性id,以便将表中的id存储在DB中,以便更新更容易

我会尽量清楚地解释我的问题: 我有两个表:document和category,它们有多对多的关系。我正在学习用Java优雅地编程,请原谅我的无知

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

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

我还需要对一些文档进行修改,我是否需要在类文档中创建一个属性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...
}
公共类文档{
私有整数id;//来自DB的id,如果是新对象,则为0
私有字符串名称;
私有字符串url;
创建私人日期;
私有数组列表类别;
//接球手和接球手。。。
}
这可能会让人困惑,但我只想以一种“标准”的方式来描述事情!我知道如何通过使用多个查询等以“肮脏”的方式完成所有这些。。。但我再次需要有经验的OO开发人员的想法

编辑: 我删除了MVC;
我在Java中是新的,所以我只使用基本的Java(没有ORM,没有框架)。我不知道Hibernate是什么,我正在调查。

如果您使用类似Hibernate的ORM,您将使用
数组列表,而不是字符串列表。这将是更纯粹的OOP方法。不确定为什么将其标记为MVC。

如果您使用的是类似Hibernate的ORM,您将使用
ArrayList而不是字符串。这将是更纯粹的OOP方法。不确定为什么要将此标记为MVC

我需要补充吗 类别的ArrayList作为类文档的属性?和 是否将文档的ArrayList作为类别中的属性

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

document1.getCategories().get(0)...
您不需要通过这样的类别访问文档

category1.getDocuments().get(0)...
,则只有一个列表就足够了。在本例中,您将这些类之间的关系称为单向关系。如果两种方法都需要,则需要两个列表。在这种情况下,你的关系是双向的。无论如何,如果单向关系已经足够了,那么您应该选择单向关系,因为在这种情况下,您不必使两个列表保持同步


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

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


正如您所说,您正在学习Java,我想补充一些一般性意见:

您在示例中声明了如下列表:

private ArrayList<String> category;
私有数组列表类别;
在这里,您应该更喜欢接口列表,而不是具体的实现类ArrayList

private List<String> category = new ArrayList<String>();
private List category=new ArrayList();
这将允许您使用任何类型的实现(例如ArrayList或LinkedList),因为您的代码不再依赖于具体的实现类

此外,我想提到的是,有许多框架支持将数据库内容映射到Java对象。所以,如果你必须做很多映射,你一定要考虑使用其中一个(例如Hibernate)。 我需要补充吗 类别的ArrayList作为类文档的属性?和 是否将文档的ArrayList作为类别中的属性

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

document1.getCategories().get(0)...
您不需要通过这样的类别访问文档

category1.getDocuments().get(0)...
,则只有一个列表就足够了。在本例中,您将这些类之间的关系称为单向关系。如果两种方法都需要,则需要两个列表。在这种情况下,你的关系是双向的。无论如何,如果单向关系已经足够了,那么您应该选择单向关系,因为在这种情况下,您不必使两个列表保持同步


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

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


正如您所说,您正在学习Java,我想补充一些一般性意见:

您在示例中声明了如下列表:

private ArrayList<String> category;
私有数组列表类别;
在这里,您应该更喜欢接口列表,而不是具体的实现类ArrayList

private List<String> category = new ArrayList<String>();
private List category=new ArrayList();
这将允许您使用任何类型的实现(例如ArrayList或LinkedList),因为您的代码不再依赖于具体的实现类


此外,我想提到的是,有许多框架支持将数据库内容映射到Java对象。所以如果你必须做很多映射,你一定要考虑使用其中的一个(例如Hibernate)。

< P>托马斯的回答非常好。我只想补充一点,如果你想要双向的话