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

Rom*_*man 5 spring-data-elasticsearch

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

类的属性之一需要是 id,通过使用 @Id 对其进行注释或使用自动找到的名称 id 或 documentId 之一。

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

No id property found for class com.example.domain.entity.Project!
Run Code Online (Sandbox Code Playgroud)

我发现我正在使用 JPA 包中的 @Id 注释:javax.persistence.Id. 当我@org.springframework.data.annotation.Id为我的字段添加另一个 @Id 注释时,从存储库中获取正在工作!

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

Spring Data Elasticsearch 是否支持来自 JPA 的 @Id 注释?了解这一点非常重要,因为进一步了解嵌入式 ID 呢?Spring Data Elasticsearch 是否支持 @EmbeddedId 注解?

我的实体:

@Entity
@Document(indexName = "project_list", type = "external")
public class Project implements Serializable {

    @Id
    @org.springframework.data.annotation.Id <-- without it Spring Data Elasticsearch is complaining that 'No id property found'
    @Column(name = "PROJECT_ID")
    private Long projectId;

    .... other fields and getters/setters
}
Run Code Online (Sandbox Code Playgroud)

小智 0

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

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

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