Spring JPA保存临时实体

时间:2018-09-15 16:32:08

标签: java mysql spring hibernate

在休眠状态下,如果我persist新的实体应该成为托管实体,而且还应该返回托管实体。

如果该实体是分离的,则merge将返回托管实体,但我传递的那个实体仍将分离。

我已经尝试过在春季启动时使用休眠模式,并且除了以下情况外,一切都可以正常工作:

User transientUser=new User();
    transientUser.setId(9L);
    User managedTransientUser=userRepository.save(transientUser);

如果我手动设置Id(即使删除了自动生成),则我传递的实体(transientUser)仍将不受管理。如果我使用Generation Identity,那么返回并传递的实体是相同的(id为null,数据库将自动递增)是否与预期的一样?

1 个答案:

答案 0 :(得分:1)

那仅仅是因为您没有呼叫persist()。您正在呼叫userRepository.save()

此方法测试实体是否为新实体(通过检查其是否已有ID)。如果是,它将调用persist()。否则,它将调用merge()。由于您的实体已有ID,因此它将调用merge()