说我有以下收藏
public @Data class Customer {
@Id
private String id;
private String firstName;
private String lastName;
@DBRef
private List<Address> addressList= new ArrayList<Address>();
}
和
public @Data class Address {
@Id
private String id;
private String address;
private String type;
private String customerID;
}
每位客户都有多个地址,我已实施MongoRepository
。第一次保存客户工作得很好customerRepo.save(customerObject)
,在调用保存之前,我将持久保存多个地址对象,然后将其设置为addressList
。
下次当我更新同一文档并想要在现有列表中添加一组新地址时,它将覆盖整个addressList
数组。所以基本上我现在要做的就是设置这个existingCustomerObject.getAddressList().addAll(my new List of address)
这样的新地址,如果有千元(或者超过千元)的元素,或者我正在切割addressList数组,下面的程序不是一个好主意。我的问题是实现这种情况的最佳方法是什么?说如果我不想使用MongoTemplate
。是否可以使用MongoRepository
答案 0 :(得分:0)
我认为你不能这样做。以前我有同样的情况,我尝试了以下
1. org.springframework.core.convert.converter.Converter
即使我设法操纵了D BObject
,但$push
或$set
(将它们包裹在密钥下)等功能在那里无效。< / p>
2. AbstractMongoEventListener
通过覆盖onBeforeSave
但在保存期间没有进行对象操作。
但是你可以尝试改变上面提到的
你可以尝试覆盖MongoRepository
保存方法,如果有人指向正确的方向会更好。
否则,对于我的场景,我必须创建与MongoRepository
并行工作的自定义存储库(更新和删除文档)(用于插入和检索数据/文档),但我认为这是一个丑陋的解决方法。必须有一个更清洁的方法来做到这一点。