保持ID与对象分开

时间:2012-11-11 01:05:00

标签: java oop orm model

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

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

我的应用程序的Java客户端可以调用addUsergetUserByIdeditUser和其他API操作。每个此类请求都作为Java对象组成,例如:

class EditRequest {  
  User newUserProfile; 
}

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

2 个答案:

答案 0 :(得分:2)

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

使用表示同一实体的单独对象会产生混淆和重复的代码。每次你必须添加一个新字段时,你必须在2个地方添加,风险不匹配或忘记更新其他地方。

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

答案 1 :(得分:0)

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