【问题标题】:Couchbase document id generationCouchbase 文档 ID 生成
【发布时间】:2018-12-04 06:50:50
【问题描述】:

我有一个与 couchbase 6.0 集成的 Springboot 应用程序。 我已经读过,如果一个键用 @Id 注释,那么它将保存为文档 ID,并且不会成为 json 的一部分。

然后我在键上同时使用了@Id 和@Field,但该字段仍然没有出现在 json 文档中。

有人可以帮我解决以下问题吗:

1:如何制作与文档 ID 相同的密钥并将其保留为 json 的一部分。

2:如果一个字段是用@Id 声明的,它被创建为文档 id 并执行 没有出现在文档上,但是当我执行获取请求时,相同的键会出现在 回应。

我也试过了,点这里https://docs.spring.io/spring-data/couchbase/docs/current/reference/html/#couchbase.autokeygeneration.usingattributes

我的实体是:

@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

我已经测试了很多次,但结果都是一样的。

【问题讨论】:

  • 你好,我已经更新了答案,请看一下

标签: spring-boot couchbase spring-data-couchbase


【解决方案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,并将您的 post 方法正文中 id 字段的命名更改为 postId,类似于:

实体:

@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"
}

【讨论】:

  • @julumn,请您查看我上面编辑过的帖子。我已经按照您的解决方案进行了测试,但没有成功。
  • @lok​​endralovely 请查看更新后的答案
猜你喜欢
  • 1970-01-01
  • 2011-03-11
  • 2021-03-29
  • 2016-08-25
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 2019-11-15
相关资源
最近更新 更多