我开始使用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
答案 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;