Java 在spring数据elasticsearch中保存枚举
我正在尝试使用spring data elasticsearch将我的实体保存在elasticsearch中,所有属性都已保存(包括对象),但enum除外,它始终存储为null,这是我的实体Java 在spring数据elasticsearch中保存枚举,java,spring,spring-boot,enums,spring-data-elasticsearch,Java,Spring,Spring Boot,Enums,spring Data Elasticsearch,我正在尝试使用spring data elasticsearch将我的实体保存在elasticsearch中,所有属性都已保存(包括对象),但enum除外,它始终存储为null,这是我的实体 @Entity @Document(indexName="invoices", type="invoices", shards = 1) public class Invoice { @Transient @JsonIgnore @org.springframework.data.annotation.I
@Entity
@Document(indexName="invoices", type="invoices", shards = 1)
public class Invoice {
@Transient
@JsonIgnore
@org.springframework.data.annotation.Id
private String searchIndex;
@Field(type = FieldType.String)
private InvoiceStateEnum state;
带@Field和不带@Field的属性状态被保存为null,即使保存的对象对此枚举具有值
感谢您的帮助由于spring data elasticsearch使用Jackson,您可以将
@JsonFormat.Shape.STRING
注释放入您的枚举:
@JsonFormat.Shape.STRING
public enum InvoiceStateEnum {
// your enum code
}
我可以通过删除项目下的文件夹数据并重新运行应用程序来解决此问题,似乎出于某种原因,弹性搜索没有更新记录,因此,由于最近添加了属性,我得到了null。不起作用,它仍然以null的形式保存在弹性搜索中,您自己尝试过吗?我使用枚举的方式完全相同(对于ES v2.x,使用
@Field(type=FieldType.String)
,对于ES v5.x,使用@Field(type=FieldType.text)
),它们被保存到elasticsearch中,没有任何问题。您是否尝试过调试代码并在调用InvocePository.save(invoiceDocument)的位置设置断点,并检查状态是否正确设置?保存前可能会发生一些不好的情况?您正在使用spring data elasticsearch?是的,我正在使用spring data elasticsearch。您使用的版本是什么?我能够在两个环境中重现正确的行为:ES v2.4.1=>spring boot starter data elasticsearch/1.4.5.RELEASE和ES v5.4.1=>spring boot starter data elasticsearch/2.0.0.M2