2

我想知道如何使用 Couchbase SDK生成带有前缀的唯一 ID,例如user::524525 。

当我使用 Couchbase JavaSDK 指南开始使用 Couchbase 时,我注意到在所有示例中,id 看起来都类似于 TYPE::ID,例如 user::king_arthur。也建议这样做以避免不同文档的 id 冲突。当我从 Spring Data Couchbase 阅读文档时,我认为这样做的方法是

import org.springframework.data.couchbase.core.mapping.id.GeneratedValue;
import org.springframework.data.couchbase.core.mapping.id.GenerationStrategy;
import org.springframework.data.couchbase.core.mapping.id.IdPrefix;
import com.couchbase.client.java.repository.annotation.Id;
...

@Data
public class User {    

    @IdPrefix
    private String prefix = "user";

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

但是当我对此进行测试并签入数据库时​​,ID 只是“用户”。

我错过了什么吗?它是一个错误吗?我将不胜感激任何建议。

4

1 回答 1

3

所以实际上我找到了答案,我不得不像这样使用GenerationStrategy.UNIQUE

@IdPrefix
private String prefix = "user";

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

它会生成一个唯一的 ID,例如 user::8a9gfa4d55f7。

JavaDoc 虽然令人困惑,因为对于 GenerationStrategy.USE_ATTRIBUTES 它明确表示它将使用前缀:

使用提供的 id、前缀、后缀从实体属性构造键

但不适用于 GenerationStrategy.UNIQUE:

使用 uuid 生成器

于 2019-03-01T15:21:38.220 回答