在Spring MVC中构建域对象的哪种方法更正确?

时间:2017-10-20 13:37:00

标签: java spring

我们假设我们有三个需要保留的域类:

class House{
    private List<Room> rooms;
    private Address address;
}

class Room{
    private String id;
    ...
}

class Address{
    private String id;
    ...
}
  1. 域对象是否有id字段?
  2. 如果是,那就更好了:在问题的顶部实现House类,或用含有id的较轻String替换对象字段?

    class House {     私人清单&lt;&#39;字符串&gt; roomIds;     private String addressId; }

  3. 谢谢!

2 个答案:

答案 0 :(得分:0)

是的,每个域对象都应该有ID,因为您必须提供数据库中每个实体的唯一性。 Id字段的类型取决于您使用的数据库。如果你使用sql数据库,那么它通常是长类型。如果您使用MongoDb - 它是String。

  

class House {private List&lt;'String&gt; roomIds; private String addressId; }

你不应该使用ID列表。这是不好的做法。改为使用实体之间的关系。 Сonsider使用JPA构建域模型。在你的情况下房子和房间之间的关系 - OneToMany,因为一个特定的房子可以包括很多房间,但每个房间只能属于一个房子。在地址的情况下......这是OneToOne关系。每个地址都有单独的房子(平面)。您可以使用Address作为可嵌入对象进入House。

class House{
  private long houseId;
  private List<Room> rooms;
  private Address address;
}

class Room{
  private int roomId;
  private House house;
}

class Address{
  private long addressId;
  ...
}

答案 1 :(得分:0)

每个类都应该有一个id,如果你使用hibernate,你需要使用 @Id 进行注释。在设计模型时,您应该考虑两种类型的键。

自然键 -
自然键(也称为业务键)是一种在关系模型数据库设计中找到的唯一键,它由现实世界中已存在的属性组成。它用于与业务相关的列。 ...自然密钥有时称为域密钥。

代理键 - 代理键是可以声明为主键而不是“真实”或自然键的任何列或列集。有时可以有几个自然键。