У меня есть модель, которая выглядит так:
{
"projectName": "MyFirstProject",
"projectId": "1234",
"testCaseList": [
{
"testCaseName": "TestCase1",
"steps": [
{
"Action": "Click on this",
"Result": "pass"
},
{
"Action": "Click on that",
"Result": "pass"
}
]
},
{
"testCaseName": "TestCase2",
"steps": [
{
"Action": "Click on him",
"Result": "pass"
},
{
"Action": "Click on her",
"Result": "pass"
}
]
}
]
}
Однако, поскольку это вложенный объект, у меня возникают трудности с обновлением его с помощью метода:
default PanacheUpdate update(String update, Object... params)
I Я использую шаблон репозитория, а ниже - мой фрагмент кода:
List<TestCase> newTestCaseList = ...;
update("testCaseList", newTestCaseList).where("projectId=?1",projectId);
, который на самом деле вызывает следующую ошибку:
org.bson.json.JsonParseException: JSON reader was expecting ':' but found ','.
at org.bson.json.JsonReader.readBsonType(JsonReader.java:149)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:82)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41)
at org.bson.codecs.BsonDocumentCodec.readValue(BsonDocumentCodec.java:101)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84)
at org.bson.BsonDocument.parse(BsonDocument.java:63)
at io.quarkus.mongodb.panache.runtime.MongoOperations.executeUpdate(MongoOperations.java:634)
at io.quarkus.mongodb.panache.runtime.MongoOperations.update(MongoOperations.java:629)
Мой текущий подход
Что в настоящее время работает для меня, так это использовать вместо него default void update(Entity entity)
при обновлении вложенных объектов. Тем не менее, здесь есть несколько соображений:
- Требуется дополнительный код для выборки всего документа, анализа и обновления обязательных полей
- Поскольку
update(Entity entity)
работает на уровне документа, он также обновит неизмененные части документа, что не идеально.