springjpa保存 transient 实体

monwx1rj  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(318)

在冬眠中如果我 persist 新实体它应该成为被管理的,而且它应该返回被管理的实体。
如果实体已分离,则 merge 将返回托管实体,但我传递的实体仍将分离。
我在带hibernate的spring boot中尝试过,除了以下情况外,其他一切都正常:

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

如果我手动设置id(即使删除自动生成),我传递的实体(transientuser)仍将处于非托管状态。如果我使用generationidentity,那么返回的实体和传递的实体是相同的(id为null,db将自动递增),这是预期的吗?

nfzehxib

nfzehxib1#

那只是因为你不打电话 persist() . 你在打电话吗 userRepository.save() .
这个方法测试实体是否是新的(通过检查它是否已经有一个id)。如果是,它会打电话 persist() . 否则它会调用 merge() . 因为您的实体已经有了一个id,所以它调用 merge() .

相关问题