在Spring Data中将整个对象存储为json

时间:2018-04-14 22:23:55

标签: spring-data

我有以下域对象:

@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上的字段没有表格中的相应列。

1 个答案:

答案 0 :(得分:0)

您可以hibernate-types使用Vlad Mihalcea 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