我有以下域对象:
@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
上的字段没有表格中的相应列。
答案 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;