DAO/repository:插入/更新后的良好实践返回值

Tra*_*ace 7 java dao design-patterns repository-pattern

虽然可能是一个微不足道的问题,但我总是对此感到疑惑.

通常,在插入db之后,通常的做法是返回业务实体的id.

@Override
public Long createUser(UserEntity user) {
    em.merge(user); 
    em.flush(); 

    return user.getId(); 
}
Run Code Online (Sandbox Code Playgroud)

是否有令人信服的理由返回id而不是业务对象引用本身?

同样,我已经看到了update返回void,而它可能也是一个id/User.

如果我要为其他人编写一个DAO/Repository来使用,那么建议的返回值是什么(如果有的话),为什么?

And*_*lko 6

如果已成功创建/更新,为什么不返回整个实例?与 Spring Data 所做的相同,

<S extends T> S save(S entity);
<S extends T> Iterable<S> save(Iterable<S> entities);
Run Code Online (Sandbox Code Playgroud)
  1. 如果我需要创建/更新对象的另一部分,除了id? ( name,date对于User实体)。

  2. id如果有几个字段完全表征实例(复合主键),为什么会返回?

返回整个对象没有困难(正如@Danny Fonk 所提到的,这里没有什么是“开销”),但是将来可能会节省很多时间。