在休眠状态下,如果我persist
新的实体应该成为托管实体,而且还应该返回托管实体。
如果该实体是分离的,则merge
将返回托管实体,但我传递的那个实体仍将分离。
我已经尝试过在春季启动时使用休眠模式,并且除了以下情况外,一切都可以正常工作:
User transientUser=new User();
transientUser.setId(9L);
User managedTransientUser=userRepository.save(transientUser);
如果我手动设置Id(即使删除了自动生成),则我传递的实体(transientUser)仍将不受管理。如果我使用Generation Identity,那么返回并传递的实体是相同的(id为null,数据库将自动递增)是否与预期的一样?
答案 0 :(得分:1)
那仅仅是因为您没有呼叫persist()
。您正在呼叫userRepository.save()
。
此方法测试实体是否为新实体(通过检查其是否已有ID)。如果是,它将调用persist()
。否则,它将调用merge()
。由于您的实体已有ID,因此它将调用merge()
。