java - JAVA(DAO)和SQL中的聚合关系

标签 java sql dao aggregation

我尝试编写我的第一个 DAO 程序。 在我的数据库中,我创建了两个表:PROJECT 和 MILESTONE。通常情况下,项目和里程碑之间有一种聚合关系:一个项目可以有多个里程碑,但一个里程碑不可避免地只会影响一个项目。

我有两个主要问题:

1) 在 SQL 表中,这是否意味着我必须在 projectid 上添加约束(外键)并将该外键与里程碑表相关联? 到目前为止,我选择在里程碑表中有一列名为“projectid”的列。在我看来,如果我们这样做就很简单。

2)当我创建一个里程碑对象时,必须指定projectid,所以我尝试编写这个构造函数:

 public Milestone (String name, String description, String projectId) throws SQLException, ClassNotFoundException {
    this.name = name;
    this.description = description;

    ProjectDAOImpl proj = new ProjectDAOImpl();
    // "proj.findById(projectId)" is to verify if a real project exist having the specified id 
    if ( (proj.findById(projectId))!= null )  {
        this.projectId = projectId;
    }
    else {
        return null; //is it correct to do that in a constructor??
    }
    }

这里的问题是我不知道如何用 Java 翻译这个条件: “如果存在具有此指定 ID 的现有项目,则里程碑将受到该项目的影响。如果没有,则不会创建里程碑对象”。我的意思是,如果没有相应的项目,我如何告诉构造函数不要创建对象?

最佳答案

  • 构造函数不能返回值。您可以抛出异常(例如 IllegalArgumentException)而不是返回 null 值。
  • 关于java - JAVA(DAO)和SQL中的聚合关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36281656/

    相关文章:

    java - Spring范围请求哈希码

    java - 是否有一个队列(PriorityQueue)实现也是一个集合?

    sql - 多边形之间的PostGIS递归交集

    mysql - 使用 group by 子句的查询排序不正确

    java - DAO 方法参数、对象引用与 id

    java - 几个sql请求检索数据(hibernate)

    java - if 语句中未初始化值

    Java:没有默认构造函数的类的newInstance

    SQL MAX(DATE) 订单号

    java - JSF - 无法显示来自 ManagedBean 的对象列表