java - 编程一对多关系

标签 java oop one-to-many relationship

所以令我惊讶的是,在 google 和 stackoverflow 上进行搜索并没有返回更多结果。

在 OO 编程中(我使用的是 java),如何正确实现一对多关系?

我有一个类 Customer 和一个类 Job。我的申请是针对一家为客户完成工作的虚构公司。我当前的实现是 Job 类与 Customer 类没有任何关系,根本没有对它的引用。 Customer 类使用集合和方法来保存、检索和修改有关已由客户分配和/或为客户完成的工作的信息。

问题是,如果我想知道为哪个客户完成了特定的Job 怎么办?我只找到了这篇相关的文章:http://www.ibm.com/developerworks/webservices/library/ws-tip-objrel3/index.html .

根据作者的实现,我会让 Job 构造函数接受一个 Customer 参数,并存储它以便我可以检索它。但是,我看不到这个模型可以一致的任何保证。没有限制将某项工作的相关客户设置为该工作不针对的客户,并向为其他人完成的客户添加工作。如有任何帮助,我们将不胜感激。

最佳答案

没有 100% 万无一失的方法来保持完整性。

通常采用的方法是用一种方法构造关系,用同样的方法构造另一个方向。但是,正如您所说,这并不能阻止任何人弄乱它。

下一步将是使一些方法包可访问,这样至少与您的方法无关的代码不会破坏它:

class Parent {

  private Collection<Child> children;

  //note the default accessibility modifiers
  void addChild(Child) {
    children.add(child);
  }

  void removeChild(Child) {
    children.remove(child);
  }
}

class Child {

   private Parent parent;
   public void setParent(Parent parent){
     if (this.parent != null)
       this.parent.removeChild(this);
     this.parent = parent;
     this.parent.addChild(this);
   }
}

实际上,您不会经常在类(class)中模拟这种关系。相反,您将在某种存储库中查找父项的所有子项。

关于java - 编程一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10086529/

相关文章:

php - 学说 2 : Saving Entity in Complex Relationship

java - 外键更新异常: foreign keys set to null in Hibernate one-to-many relationship

java - Tomcat AD 身份验证 - 允许所有 AD 用户

java - 为什么我们有非静态函数/方法?

PHP 属性不存在但使用时没有抛出错误

java - 每次调用类方法时避免计算

java - 使用 Criteria 的 Hibernate 一对多搜索

java - IntelliJ IDEA 注释处理不会在配置的文件夹中生成源

java - JAXB 是否存在内存使用问题?

java - 使用 JXL 访问 Excel 中超过 256 列