【问题标题】:Creating model using provided json string使用提供的 json 字符串创建模型
【发布时间】:2019-03-18 07:57:05
【问题描述】:

我想在 Spring Boot 中使用以下 json 字符串创建模型。

{
  "name": "inox",
  "seatInfo": {
    "A": {
      "numberOfSeats": 10,
      "aisleSeats": [
        0,
        5,
        6,
        9
      ]
    },
    "B": {
      "numberOfSeats": 15,
      "aisleSeats": [
        0,
        5,
        6,
        9
      ]
    },
    "D": {
      "numberOfSeats": 20,
      "aisleSeats": [
        0,
        5,
        6,
        9
      ]
    }
  }
}

到目前为止,我已经这样做了。

 import java.util.Map;
 import javax.persistence.*;

 @Entity
 public class Screen {

     @Id
     @GeneratedValue
     private Long id;
     private String name;
     private Map<String, RowInfo> seatInfo;

     //getter and setters
 }


 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import java.util.Arrays;

 @Entity
 public class RowInfo {

     @Id
     @GeneratedValue
     private Long id;
     private int numberOfSeats;
     private Integer aisleSeats[];

     //getters and setters
 }

应用程序启动时出现以下异常。

嵌套异常是 org.hibernate.MappingException:无法确定类型:java.util.Map,在表:屏幕,列:[org.hibernate.mapping.Column(seat_info)]

【问题讨论】:

  • 可能不相关,但为什么要在同一个实体声明中混用 intInteger

标签: java json spring-boot


【解决方案1】:

使用 HashMap 类型(或您喜欢的类型)更改 Map 接口。

@Entity
public class Screen {

     @Id
     @GeneratedValue
     private Long id;
     private String name;
     private HashMap<String, RowInfo> seatInfo;

     //getter and setters
 }


 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import java.util.Arrays;

 @Entity
 public class RowInfo {

     @Id
     @GeneratedValue
     private Long id;
     private int numberOfSeats;
     private Integer aisleSeats[];

     //getters and setters
 }

【讨论】:

    【解决方案2】:

    如果您使用的是 JPA 2,请添加:

    @ElementCollection
    
    private Map<String, RowInfo> seatInfo;
    

    【讨论】:

      【解决方案3】:

      使用一些 JPA 2 实现:它添加了一个 @ElementCollection 注释,类似于 Hibernate 注释,这正是您需要的......

      @Entity
      public class Screen {
      
          @Id
          @GeneratedValue
          private Long id;
          private String name;
          @ElementCollection
          private Map<String, RowInfo> seatInfo;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多