1

我有一个使用主键存储在数据库中的 Java 对象用户。例如:

id | login | name | surname
---------------------------
0  | admin | Bob  | Marley
1  | ..... | .... | ......

我的应用程序的 Java 客户端可以调用 、 和其他 APIaddUser操作getUserByIdeditUser每个这样的请求都组成一个 Java 对象,例如:

class EditRequest {  
  User newUserProfile; 
}

我在为这些操作定义模型时遇到了问题:我应该对所有操作使用一个User具有四个字段idlogname和的对象,surname还是应该将它们分隔为Userand UserValue,其中第二个对象包含除 ID 之外的所有字段。第二个对象不包含 ID 的原因是它旨在用于addUser除了 ID 之外的所有字段都从客户端传递的操作,因为 ID 是为服务器端的新用户生成的。这种分离将允许我UserValue在客户端上构造一个对象,而不是例如创建一个User带有空 ID 字段。第三种解决方法是始终将 User 和 ID 分开,并在必要时使用 Map 将它们绑定在一起。什么是最好的选择?

4

2 回答 2

2

“标准”方法是每个表(实体)只有一个对象。如果您查看Java Persistence API方法是如何创建一个对象的。对于尚未持久化到数据库的对象,主键字段为空。

具有表示同一实体的不同对象会造成代码混乱和重复。每次您必须添加一个新字段时,您必须在 2 个位置添加,并且可能会出现不匹配或忘记更新其他位置的风险。

我会认真考虑使用现成的 ORM 包来实现 JPA(例如 Hibernate 或 EclipseLink),而不是自己做事。您只需花费很长时间,并且只实现这些框架提供的开箱即用功能的一小部分。

于 2012-11-11T01:40:57.190 回答
0

每种方法都有优点和缺点。就个人而言,我会将 id 保留在对象中,因为这对对象总是有用的。如果您查看几乎任何 ORM(例如 hibernate),您几乎总是会看到对象被创建为带有 id 字段的简单 POJO,其中 null 用于尚未分配 id 的新对象。虽然这可能不是完美的解决方案,但我会选择它,因为我相信它的优点最多,缺点最少。

于 2012-11-11T01:13:04.850 回答