spring数据和mongodb中级联存储的实现
我正在实现一个基于spring数据和mongodb的应用程序 QATemplate.java 我有一个字段,可以是简单的文本,也可以是嵌入的文档。 因此,我将该字段创建为对象类型spring数据和mongodb中级联存储的实现,mongodb,spring-data,spring-data-mongodb,Mongodb,Spring Data,Spring Data Mongodb,我正在实现一个基于spring数据和mongodb的应用程序 QATemplate.java 我有一个字段,可以是简单的文本,也可以是嵌入的文档。 因此,我将该字段创建为对象类型 @Field("answer") private Object answer; 它工作得很好。 但我需要用自己的id保存嵌入的文档,并将其id作为引用传递到此文档中,所以我必须这样编写代码 @Field("answer") @DBRef @CascadeSave pri
@Field("answer")
private Object answer;
它工作得很好。
但我需要用自己的id保存嵌入的文档,并将其id作为引用传递到此文档中,所以我必须这样编写代码
@Field("answer")
@DBRef
@CascadeSave
private Object answer;
{
"title":"Indiaa",
"answerType":"text",
"answer":[
{
"title":"Indiaana jones",
"answerType":"text",
"answer":"testing vvv"
}
]
}
为了实现级联保存,我使用了
CasecadeSave.java
CasecadeCallback.java
CascadeSaveMongoEventListener.java
但是在应用这段代码之后,如果我像这样插入json数据
@Field("answer")
@DBRef
@CascadeSave
private Object answer;
{
"title":"Indiaa",
"answerType":"text",
"answer":[
{
"title":"Indiaana jones",
"answerType":"text",
"answer":"testing vvv"
}
]
}
我有一个错误:
threw exception [Request processing failed;
nested exception is java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to com.mongodb.BasicDBList] with root cause
java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to com.mongodb.BasicDBList
HTTP Status 500 - Request processing failed;
nested exception is org.springframework.data.mapping.model.MappingException: No mapping metadata found for class java.lang.String
如果我尝试像这样插入json数据:
{
"title":"Indiava",
"answerType":"text",
"answer":"vv"
}
{
"title":"Where is India",
"answerType":"text",
"answer":{
"text":"Asia"
}
}
我有一个错误:
threw exception [Request processing failed;
nested exception is java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to com.mongodb.BasicDBList] with root cause
java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to com.mongodb.BasicDBList
HTTP Status 500 - Request processing failed;
nested exception is org.springframework.data.mapping.model.MappingException: No mapping metadata found for class java.lang.String
使用
DBRef
时,您只保存对它的引用,而不是将您的答案
对象保存在QATemplate
中,但它位于另一个集合中:
{ "$ref" : "COLLECTION", "$id" : ObjectId("someobjectID") }
此外,您说您想要一个答案“文档”,但实际上您首先传递了一个数组,然后传递了一个简单的字符串
要使其运行,请创建一个包含应答文档和字符串应答的类型。这样,Spring数据MongoDB
就会知道将它放在哪个集合中。首先,尝试使用一个文档,如下所示:
{
"title":"Indiava",
"answerType":"text",
"answer":"vv"
}
{
"title":"Where is India",
"answerType":"text",
"answer":{
"text":"Asia"
}
}
其中,答案
为:
@Field("answer")
@DBRef
@CascadeSave
private Answer answer;
@Document(collection = "Answers")
public class Answer {
@Id
private String id;
String text;
}
答案是:
@Field("answer")
@DBRef
@CascadeSave
private Answer answer;
@Document(collection = "Answers")
public class Answer {
@Id
private String id;
String text;
}
一旦运行,将
Answer
转换为一个界面,然后使用TextAnswer
(简单文本)或FullAnswer
(整个答案文档)。根据我的要求,Spring-Data-MongoDB
支持多态性。答案不是预定义的,可以是字符串或qamplate。如果是字符串,则只应创建一个文档,但如果是QATemplate,则应保存所有子文档并在主文档中传递其引用。在每次建议的答案中,当答案为TextAnswer时,它将仅为答案创建一个文档,并在主文档中进行引用。i、 e.保存两个不同的文档。但我只想保存一个文档,以防出现字符串。