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

5
我开始使用Spring Data Elasticsearch。我阅读到:
“该类的属性之一需要是id,可以通过使用@Id进行注释或使用自动找到的名称之一id或documentId来实现。”
但是当我使用@Id标记我的Project实体字段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留在那里吗? - James111
2个回答

0

我有一个类似的问题,我也同时使用JPA和Elasticsearch,更改后问题得到了解决

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

javax.persistence.Id;

id列的默认名称

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

0

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

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

然而,它似乎不支持@EmbeddedId:SimpleElasticsearchPersistentProperty.SUPPORTED_ID_PROPERTY_NAMES


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接