java - 将 ID 与对象分开

标签 java oop orm model

我有一个 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对于所有操作,或者我应该将它们分隔为 UserUserValue ,其中第二个对象包含除 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/

相关文章:

java - 如何从同一个类中的另一个方法调用一个方法(java)

java - 在 javascript 中处理 POJO

symfony - symfony2 中的每个类都需要是一个服务吗?

Java:类和扩展类

php - Doctrine:如何根据与 Criteria 的关联按属性排序

java - 在 Java 中以串行方式运行 Cucumber 测试

java - 如何为多个平台导出 eclipse 4 应用程序

javascript - 如何向 javascript 类添加回调函数?

rest - JPA 2.0 元模型是否可用于确定双向关联的双方

python - DJANGO:通过 QuerySet except() 进行 FK 字段查找