将ElasticSearch与Spring Data一起使用时自动生成数字ID

时间:2017-11-14 15:15:06

标签: java spring elasticsearch spring-data spring-data-elasticsearch

我目前正在将我使用Hibernate从Spring Data做的项目转换为使用ElasticSearch的Spring Data。

之前,我能够使用注释@GeneratedValue(strategy = GenerationType.IDENTITY)自动生成我的实体的ID。这样,当保存实体时,会为其生成一个id号。

但是,我似乎无法找到ElasticSearch用来实现相同结果的注释。

使用Hibernate注释的实体:

@Entity
@Table(name = "person")
public class Person {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "name")
    private String name;

    @Column(name = "age")
    private int age;

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

是否存在与@GeneratedValue注释等效的ElasticSearch?如果不是,使用ElasticSearch时填充id字段的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#search-mapping-entity上的文档似乎确实表明@GeneratedValue应该正常运行。您使用的是正确的集成库吗?

答案 1 :(得分:0)

我遇到了同样的问题并使用此代码解决了它:

@Entity
@Table(name = "person")
public class Person {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @GeneratedValue(generator="generator")
    @org.springframework.data.annotation.Id
    private long id;