【问题标题】:Couchbase - Auto generate key with user defined suffixCouchbase - 使用用户定义的后缀自动生成密钥
【发布时间】:2019-07-08 03:07:46
【问题描述】:

我想使用 spring boot java 在 couchbase 中保存一个员工对象。我正在使用反应式沙发底座驱动程序。我的要求是使用带有硬编码字符串“-EMPLOYEETYPE”后缀的employeeId 保存员工对象。

示例: 从 Java 应用程序到 couchbase 的对象:

{ "employeeId" : "12345", "lname" :"ltest", "fname" : "ftest"}

在保存到沙发底座时,应该像

那样生成密钥
"12345-EMPLOYEETYPE"

下面的代码不起作用,请指导我如何实现它。 注意:我使用的是 lombok,所以没有 getter 和 setter。

@Document
public final class Employee {

        @Id @GeneratedValue(strategy = GenerationStrategy.USE_ATTRIBUTES,delimiter="-EMPLOYEETYPE")
        private String id;

        @IdAttribute
        private String employeeId;
}

【问题讨论】:

  • "下面的代码可以正常工作吗?" - onSO,提出问题的发帖人应该说他们的代码是否有效和/或什么不起作用。你试过你的代码吗?
  • @ErwinBolwidt,为此道歉。它不工作。我现在已经编辑了我的帖子。
  • 你能告诉我,id 是不是一个自增数?还是一个 couchDB 序列?
  • @user_D_A__,这里我不是试图从自动增量或序列中生成 id。我想基于employeeId创建带有一些后缀的密钥。这里来自输入本身的employeeId 将是唯一的。我需要附加后缀的原因是,couchbase 将所有类型的(员工、地址等)文档放入单个存储桶中。在某些情况下,employeeId 和 addressId 可能会发生冲突。为了避免这种情况,我想添加一个与对象类型相关的后缀。

标签: java spring-boot couchbase spring-webflux


【解决方案1】:

找到了解决办法。我们需要创建一个分配有后缀字符串字面量的实例变量,并使用@IdSuffix 进行注释。 (对于前缀,@IdPrefix)。该字段不会持久化到 couchbase 中,仅用于生成文档的 id。

@Document
public final class Employee {

    @Id @GeneratedValue(strategy = GenerationStrategy.USE_ATTRIBUTES,delimiter="-")
    private String id;

    @IdAttribute
    private String employeeId;

    @IdSuffix
    private String suffix = "EMPLOYEETYPE";
}

参考文档:https://docs.spring.io/spring-data/couchbase/docs/current/reference/html/#couchbase.autokeygeneration.configuration

【讨论】:

    猜你喜欢
    • 2017-08-09
    • 1970-01-01
    • 2012-10-07
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 2012-11-14
    相关资源
    最近更新 更多