将JSON数组映射到Spring Hibernate数据库(H2)

时间:2018-06-20 07:28:31

标签: json hibernate spring-boot hibernate-mapping

嗨,我正在尝试将JSON映射到SprinBoot中的databse表。 这是我的@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数据库中。

数据库中只有一列包含字母和数字的字符串

我的问题是:如何更改

  

私有字符串[] food_pairing;

将所有food_pairings显示为数据库中的单独列?

((如果我在JSON中有一个对象,我可以在@Entity中做到这一点:

 @Embedded private Address address;

然后在其他班级:

@Embeddable public class Address {

 private String street;
 private String suite;

 }

我在数据库中有一个自动创建的列。我想做同样的事情,但不要只用JSON中的字符串数组处理JSON中的对象。

1 个答案:

答案 0 :(得分:0)

如果我了解您的要求,则希望将此数组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...