当您拥有诸如UserEntity之类的实体时,谁的id
属性是从数据库中其主键派生的-您是否应该提供诸如setId()
的setter方法?
一些反对:
id
相同但属性不同。 (如果我从数据库中拉出3个不同的Users并将其id
值设置为相同)的一些参数:
id
实例化UserEntity(因为它具有setter方法),则可以使用具有临时/伪造/新用户值的UserEntity对象的方法...而不必持久化首先。 提供一个setter(不要在构造函数中强制使用
id
),还是在构造函数中强制使用id
,然后删除该setter? 最佳答案
实体的标识值应由持久层管理,理想情况下不能由其他任何东西设置-持久层应在持久时分配新的标识值,并在检索时设置新的标识值。此外,您应该能够使用临时(非持久)实体,而无需访问其身份。允许通过构造函数设置身份可能导致问题,因为没有权威的身份值来源。可以从外部源分配身份的一个示例是,如果客户端请求一个新的持久性实体使用UUID作为其身份,尽管此示例是人为设计的。
关于language-agnostic - 实体的ID作为构造函数参数还是通过setter方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9829890/