我有一个 Java 对象user,它存储在带有主键的数据库中。例如:
id | login | name | surname
---------------------------
0 | admin | Bob | Marley
1 | ..... | .... | ......
有addUser
, getUserById
, editUser
以及可由我的应用程序的 Java 客户端调用的其他 API 操作。每个这样的请求都由一个 Java 对象组成,例如:
class EditRequest {
User newUserProfile;
}
我在为这些操作定义模型时遇到问题:我应该使用一个对象 User
有四个字段 id
, log
, name
,和surname
对于所有操作,或者我应该将它们分隔为 User
和UserValue
,其中第二个对象包含除 ID 之外的所有字段。第二个对象不包含 ID 的原因是它打算在 addUser
中使用。操作中,除了ID之外的所有字段都从客户端传递,因为ID是在服务器端为新用户生成的。这种分离将允许我构造一个对象 UserValue
在客户端上,而不是创建 User
的实例ID 字段为空。解决这个问题的第三种方法是始终将 User 和 ID 分开保存,并在必要时使用 Map 将它们绑定(bind)在一起。最好的选择是什么?
最佳答案
“标准”方法是每个表(实体)只有一个对象。如果你看看 Java Persistence API方法是创建一个对象。对于尚未持久化到数据库的对象,主键字段为空。
使用代表同一实体的单独对象会导致代码困惑和重复。每次您必须添加新字段时,您都必须在 2 个位置添加,并且存在不匹配或忘记更新其他位置的风险。
我会认真考虑使用现成的 ORM 包来实现 JPA(例如 Hibernate 或 EclipseLink),而不是自己做事。您只需花费很长时间,并且只实现这些框架提供的开箱即用功能的一小部分。
关于java - 将 ID 与对象分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13327688/