是否应该将ID作为持久保存到数据库的对象的属性?

Cri*_*urf 4 orm

我正在为Web应用程序创建模型.这些表将ID字段作为主键.我的问题是,是否应该将ID定义为类的属性?

我对这个问题存在分歧,因为我不清楚我是否应该将该对象视为表结构的表示,或者我是否应该将该表视为持久化该对象的方法.

如果我采用前一个路由,那么ID就成了一个属性,因为它是数据库表结构的一部分,但是如果我采用后一种方法,那么ID可以被视为属于数据库的元数据,而不是严格意义上的数据库对象模型.

然后我们到达中间地带.虽然ID实际上不是我正在尝试建模的对象的一部分,但我确实意识到对象是从数据库中检索并持久保存到数据库中的,并且数据库中对象的ID对于许多操作至关重要.系统因此包含它以简化使用ID的交互可能是有利的.

我是一名独立开发人员,所以我真的很喜欢其他一些可能更有经验的观点

gub*_*bby 8

基本上:是的.我使用的所有持久性框架(包括Hibernate,Ibatis)都需要ID在Object上.

我理解您对元数据的看法,但是数据库中的对象应该以与数据库相同的方式实现其身份 - 通常是int主键.然后应该从中派生对象级相等.

有时您拥有复合的主键,例如名字和姓氏(不要这样做!),在这种情况下,主键不会成为"元数据",因为它是Object的标识的一部分.

我通常会保留数据库对象的ID列.我的意见是,要将它用于任何"面向客户"的目的(例如,使用主键ID作为客户编号),您将始终用脚射击自己.


bal*_*pha 5

如果您对现有数据进行了更改(而不是专门添加新数据),则需要PK.否则,您不知道要在DB中更改哪条记录.