无法创建对具有 NULL id mongo hibernate-mongo 和 spring boot 的对象的引用
Posted
技术标签:
【中文标题】无法创建对具有 NULL id mongo hibernate-mongo 和 spring boot 的对象的引用【英文标题】:Cannot create a reference to an object with a NULL id mongo hibernate-mongo and spring boot 【发布时间】:2019-01-27 07:56:44 【问题描述】:我正在使用 spring data(spring boot) 和 mongodb。我有这两个 实体
@Document(collection = "users")
public class UserEntity
private String email;
@DBRef
private DeviceEntity device;
@Document(collection = "device")
public class DeviceEntity
private String name;
and I am creating the first object of device then setting it to user
entity. Now i will save user entity.
DeviceEntity Device = new DeviceEntity();
device.setName("demo");
UserEntity user = new UserEntity();
user.setEmail("demo@gmail.com");
user.setDevice( device );
userRepo.save( user );
然后我得到了这个错误:
“无法创建对具有 NULL id 的对象的引用。] 与 root 导致 org.springframework.data.mapping.model.MappingException: 不能 创建对具有 NULL id mongo hibernate 的对象的引用。”
谁能解释我们如何使用设备实体存储用户实体。如果我先保存设备实体并设置为用户实体,我可以正常工作,但我只想保存用户实体,它会自动保存设备实体。
【问题讨论】:
【参考方案1】:发生这种情况是因为休眠无法获取 id,因为它尚未创建,因此您需要先将设备保存到 DB,然后将其设置为用户实体。
如下所示。
B b = new B();
mongoOperations.save(b);
A a = new A();
a.setB(b)
mongoOperations.save(a);
【讨论】:
是否无法保存用户实体和设备实体应该自动保存【参考方案2】:映射框架不处理级联保存。如果更改由 Person 对象引用的 Account 对象,则必须单独保存 Account 对象。对 Person 对象调用 save 不会自动将 Account 对象保存在 accounts 属性中。
请阅读以下文件;
https://docs.spring.io/spring-data/mongodb/docs/2.1.4.RELEASE/reference/html/#mapping-usage-references
【讨论】:
以上是关于无法创建对具有 NULL id mongo hibernate-mongo 和 spring boot 的对象的引用的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot Mongo findById 返回 null