将 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...