【问题标题】:Does Spring Data Elasticsearch supports @Id annotation from JPA?Spring Data Elasticsearch 是否支持来自 JPA 的 @Id 注释?
【发布时间】:2015-04-27 11:24:16
【问题描述】:

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

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

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

No id property found for class com.example.domain.entity.Project!

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

问题是我不想同时使用两种@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
}

【问题讨论】:

  • 您找到解决方法了吗?我想你可以把 data.annotation.id 留在那儿吗?

标签: spring-data-elasticsearch


【解决方案1】:

是的,1.3.0 确实支持@Id,但您需要一个 getter(可能是一个错误?)

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

不过好像不支持@EmbeddedId:SimpleElasticsearchPersistentProperty.SUPPORTED_ID_PROPERTY_NAMES

【讨论】:

    【解决方案2】:

    我有类似的问题,我也在使用 JPA 和 Elastic 搜索,更改后解决了

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

    javax.persistence.Id;
    

    列id的默认名称

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

    【讨论】:

      猜你喜欢
      • 2016-03-04
      • 2022-09-25
      • 2016-04-17
      • 2017-06-19
      • 2013-09-17
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      相关资源
      最近更新 更多