【问题标题】:Storing entire object as json in Spring Data在 Spring Data 中将整个对象存储为 json
【发布时间】:2018-04-14 22:23:54
【问题描述】:

我有以下域对象:

@Data
@Entity
public class Person {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String first;

  private String last;

  private Integer age;

  private String json;
}

PersonRepository extends Repository<Person, Long>。我想要的是存储在一个看起来像这样的表中:

CREATE TABLE IF NOT EXISTS person
(
    id SERIAL NOT NULL PRIMARY KEY,
    json JSONB NOT NULL
);

有没有办法覆盖 Spring Data 读写数据库的方式?理想情况下,我会使用 Jackson 将对象转换为 JSON。

现在任何操作都会抱怨Person 上的字段在表中没有对应的列。

【问题讨论】:

    标签: spring-data


    【解决方案1】:

    您可以使用 Vlad Mihalceahibernate-types lib - Hibernate 作者之一:

    <dependency>
        <groupId>com.vladmihalcea</groupId>
        <artifactId>hibernate-types-52</artifactId>
        <version>2.1.1</version>
    </dependency> 
    

    然后你可以像这样更新你的实体:

    @Data
    @Entity
    @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
    public class Person {
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
      //...
      @Type(type = "jsonb")
      @Column(columnDefinition = "jsonb", nullable = false)
      private String json;
    }
    

    IMO 最好在此处使用具体对象而不是 String,如下所示:

      @Type(type = "jsonb")
      @Column(columnDefinition = "jsonb", nullable = false)
      private SomeObject json;
    

    更多信息:12

    【讨论】:

      猜你喜欢
      • 2015-10-28
      • 1970-01-01
      • 2012-07-04
      • 2017-06-12
      • 2016-12-18
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2021-11-17
      相关资源
      最近更新 更多