Spring Data Elasticsearch是否支持JPA的@Id注释?

时间:2015-04-27 11:24:16

标签: spring-data-elasticsearch

我开始使用Spring Data Elasticsearch。 我读到了:

  

该类的一个属性需要是一个id,或者是   用@Id或使用其中一个自动找到的名称注释它   id或documentId。

但是当我用@Id标记我的Project实体字段projectId时,elasticsearch仍在说:

class Product {
...
    public function getTotal()
    {
        return $this->getPrice() - $this->getDiscount() + $this->getValue();
    }
}

我发现我正在使用JPA包中的注释@Id:No id property found for class com.example.domain.entity.Project! 。当我为我的字段添加另一个@Id注释javax.persistence.Id时,从存储库中获取正在运行!

问题是我不想同时使用2种@Id注释。而且,我想使用JPA注释只是因为其他模块正在使用基于JPA的存储库层(Spring Data JPA)。

Spring Data Elasticsearch是否支持JPA的@Id注释?知道因为嵌入式id更进一步,这一点非常重要吗? Spring Data Elasticsearch是否支持@EmbeddedId注释?

我的实体:

@org.springframework.data.annotation.Id

2 个答案:

答案 0 :(得分:0)

是的,1.3.0确实支持@Id,但你需要一个getter(也许是一个bug?)

ElasticsearchTemplate.getPersistentEntityId获取您的实体,尝试查找注释@Id,然后仅在定义了getter时才返回id的值。

但它似乎不支持@EmbeddedId:SimpleElasticsearchPersistentProperty.SUPPORTED_ID_PROPERTY_NAMES

答案 1 :(得分:0)

我有一个类似的问题,我也同时使用了JPA和Elastic搜索,更改后便解决了

@Column(name = "PROJECT_ID")
    private Long projectId;

javax.persistence.Id;

列ID的默认名称

@Column(name = "id")
    private Long id;