将 JSON 数组映射到 Spring Hibernate 数据库 (H2)
Mapping JSON Array to Spring Hibernate Database (H2)
您好,我正在尝试将 JSON 映射到 SprinBoot 中的数据库 table。
这是我的@Entity:
@Data
@AllArgsConstructor
@Entity
public class User {
@Id
@GeneratedValue( strategy = GenerationType.AUTO )
private Long id;
private String name;
private String tagline;
private String first_brewed;
@Column(length=700)
private String description;
private String image_url;
private Long ibu;
private String[] food_pairing;
public User() {}
}
并且 JSON 看起来是:
[
{
"id": 1,
"name": "Buzz",
"tagline": "A Real Bitter Experience.",
"first_brewed": "09/2007",
"description": "A light, crisp and bitter IPA brewed with English and American hops. A small batch brewed only once.",
"image_url": "https://images.punkapi.com/v2/keg.png",
"ibu": 60,
"food_pairing": [
"Spicy chicken tikka masala",
"Grilled chicken quesadilla",
"Caramel toffee cake"
]
}
]
我想将其保存到 H2 数据库中。
数据库中只有一列字母和数字
我的问题是:如何更改
private String[] food_pairing;
要将所有 food_pairings 显示为数据库中的单独列?
(如果我在 JSON 中有一个对象,我可以在 @Entity:
@Embedded private Address address;
然后在其他class:
@Embeddable public class Address {
private String street;
private String suite;
}
我的数据库中有一个自动创建的列。我想做同样的事情,但不是 JSON 中的对象,而是 JSON.
中的字符串数组
如果我理解您的要求,您希望将此数组 private String[] foodPairing;
保存在一列中。如果是这样,您可以按以下方式进行:
public class User {
....
@Transient
private String[] foodPairing;
@Column(name="food_pairing")
private String food_Pairing;
}
在持久化您的实体之前,您可以这样做:
user.setFood_Paring(user.getFoodPairing().toString());
那就坚持吧。
编辑:
如果您希望每个字符串都在一列中,您可以在实体中添加 3 个字段,如下所示:
public class User {
....
@Transient
private String[] foodPairing;
@JsonIgnore
@Column(name="food_pairing1")
private String foodPairing1;
@JsonIgnore
@Column(name="food_pairing2")
private String foodPairing2;
@JsonIgnore
@Column(name="food_pairing3")
private String foodPairing3;
}
当你坚持时:
user.setFoodParing1(user.getFoodPairing()[0]); //etc...
您好,我正在尝试将 JSON 映射到 SprinBoot 中的数据库 table。 这是我的@Entity:
@Data
@AllArgsConstructor
@Entity
public class User {
@Id
@GeneratedValue( strategy = GenerationType.AUTO )
private Long id;
private String name;
private String tagline;
private String first_brewed;
@Column(length=700)
private String description;
private String image_url;
private Long ibu;
private String[] food_pairing;
public User() {}
}
并且 JSON 看起来是:
[
{
"id": 1,
"name": "Buzz",
"tagline": "A Real Bitter Experience.",
"first_brewed": "09/2007",
"description": "A light, crisp and bitter IPA brewed with English and American hops. A small batch brewed only once.",
"image_url": "https://images.punkapi.com/v2/keg.png",
"ibu": 60,
"food_pairing": [
"Spicy chicken tikka masala",
"Grilled chicken quesadilla",
"Caramel toffee cake"
]
}
]
我想将其保存到 H2 数据库中。
数据库中只有一列字母和数字
我的问题是:如何更改
private String[] food_pairing;
要将所有 food_pairings 显示为数据库中的单独列?
(如果我在 JSON 中有一个对象,我可以在 @Entity:
@Embedded private Address address;
然后在其他class:
@Embeddable public class Address {
private String street;
private String suite;
}
我的数据库中有一个自动创建的列。我想做同样的事情,但不是 JSON 中的对象,而是 JSON.
中的字符串数组如果我理解您的要求,您希望将此数组 private String[] foodPairing;
保存在一列中。如果是这样,您可以按以下方式进行:
public class User {
....
@Transient
private String[] foodPairing;
@Column(name="food_pairing")
private String food_Pairing;
}
在持久化您的实体之前,您可以这样做:
user.setFood_Paring(user.getFoodPairing().toString());
那就坚持吧。
编辑:
如果您希望每个字符串都在一列中,您可以在实体中添加 3 个字段,如下所示:
public class User {
....
@Transient
private String[] foodPairing;
@JsonIgnore
@Column(name="food_pairing1")
private String foodPairing1;
@JsonIgnore
@Column(name="food_pairing2")
private String foodPairing2;
@JsonIgnore
@Column(name="food_pairing3")
private String foodPairing3;
}
当你坚持时:
user.setFoodParing1(user.getFoodPairing()[0]); //etc...