【问题标题】:Mapping JSON Array to Spring Hibernate Database (H2)将 JSON 数组映射到 Spring Hibernate 数据库 (H2)
【发布时间】:2018-11-29 06:08:24
【问题描述】:

您好,我正在尝试将 JSON 映射到 SprinBoot 中的数据库表。 这是我的@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 中的字符串数组。

【问题讨论】:

  • 我只是不明白你的第二个要求。

标签: json hibernate spring-boot hibernate-mapping


【解决方案1】:

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

【讨论】:

  • 谢谢,但我需要 3 列,每列包含这 3 个字符串。
  • 有了这个答案,你就有了想法。您可以添加任意数量的列。
  • 是的,但是如果我在 JSON 中有一个对象,我可以在 @Entity: /@Embedded 私有地址地址中做到这一点;然后在其他类中:/@Embeddable public class Address { private String street;私人弦乐套房;我的数据库中有一个自动创建的列。我想做同样的事情,但不是只用一个字符串数组来处理 JSON 中的对象。
  • 这不是您的第一个要求。请编辑您的帖子并添加这些新要求以使其更具可读性。谢谢
  • 非常感谢我的朋友的有用帮助。编译并工作! :-)
猜你喜欢
  • 1970-01-01
  • 2017-11-24
  • 2014-01-20
  • 2017-03-05
  • 2019-01-18
  • 2012-03-10
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
相关资源
最近更新 更多