我有一个集成了ouchbase 6.0的Springboot应用程序。 我已经读过,如果一个键用@Id注释,那么它将被保存为文档ID,并且不会成为json的一部分。
然后我在键上一起使用了@Id和@Field,但该字段仍未出现在json文档中。
有人可以帮我解决以下问题吗?
1:如何使用与文档ID相同的密钥,并将其保留为json的一部分。
2:如果使用@Id声明字段,则将其创建为文档ID并执行 没有出现在文档上,但是当我执行获取请求时,相同的键出现在 响应。
我的实体是:
@Id @GeneratedValue(strategy = GenerationStrategy.USE_ATTRIBUTES,delimiter="::")
private String id;
@IdAttribute
private String userid;
@Field
private String fname;
@Field
private String lname;
发布方法正文:
{
"id": "888",
"userid":"user1",
"fname": "xyz",
"lname": "abc"
}
在Couchbase服务器中,该文档另存为
仅创建文档ID为 888 ,它应生成文档ID为 888 :: user1
我已经测试了很多次,但是结果是一样的。
答案 0 :(得分:1)
看起来您正在寻找Key generation using attributes:
通常的做法是结合使用 文档属性。使用属性的密钥生成将所有内容连接在一起 根据顺序用IdAttribute注释的属性值 提供的类似于前缀和后缀。
例如,您可以这样做:
@Document
public class User {
@Id @GeneratedValue(strategy = USE_ATTRIBUTES)
private String id;
@IdAttribute
private String userid;
...
}
根据上面的示例,您将得到一个带有id = userId
以及json中的字段userId
的文档。
按问题编辑更新
您可能必须在实体中包括一个新文件,例如postId
,并用id
来更改post方法主体中postId
字段的命名,例如:< / p>
实体:
@Id @GeneratedValue(strategy = GenerationStrategy.USE_ATTRIBUTES,delimiter="::")
private String id;
@IdAttribute(order = 0)
private String postId;
@IdAttribute(order = 1)
private String userid;
@Field
private String fname;
@Field
private String lname;
发布方法正文:
{
"postId": "888",
"userid":"user1",
"fname": "xyz",
"lname": "abc"
}