【问题标题】:Saving ENUM in spring data elasticsearch在spring数据elasticsearch中保存ENUM
【发布时间】:2017-08-03 20:36:06
【问题描述】:

我正在尝试使用 spring data elasticsearch 将我的实体保存在 elasticsearch 中,所有属性都被保存(包括对象),除了 enum 它始终存储为 null,这是我的实体

@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(type = FieldType.String) 用于 ES v2.x 或@Field(type = FieldType.text) 用于 ES v5.x)并且它们被保存到 elasticsearch 中没有任何问题。您是否尝试过调试代码并在调用 invoceRepository.save(invoiceDocument) 的位置设置断点并检查 state 是否设置正确?也许在保存之前发生了一些不好的事情?
  • 你使用的是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

标签: java spring spring-boot enums spring-data-elasticsearch


【解决方案1】:

由于 spring-data-elasticsearch 使用 Jackson,您可以将 @JsonFormat.Shape.STRING 注释放入您的枚举:

@JsonFormat.Shape.STRING
public enum InvoiceStateEnum {
  // your enum code
}

【讨论】:

  • 没用,在我的elasticsearch中还是保存为null,你自己试过了吗?
【解决方案2】:

我能够通过删除我的项目下的文件夹数据并重新运行应用程序来解决问题,似乎由于某种原因弹性搜索没有更新记录,所以由于最近添加了属性,所以我得到了 null。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2022-11-16
    相关资源
    最近更新 更多