Создание модели с использованием предоставленной строки json - PullRequest
0 голосов
/ 13 октября 2018

Я хочу создавать модели, используя следующую строку json в Spring Boot.

{
  "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)]

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

Если вы используете JPA 2, добавьте:

@ElementCollection

private Map<String, RowInfo> seatInfo;
0 голосов
/ 13 октября 2018

Используйте некоторую реализацию JPA 2: она добавляет аннотацию @ElementCollection, похожую на Hibernate, которая делает именно то, что вам нужно.

@Entity
public class Screen {

    @Id
    @GeneratedValue
    private Long id;
    private String name;
    @ElementCollection
    private Map<String, RowInfo> seatInfo;
}
0 голосов
/ 13 октября 2018

Изменить интерфейс карты с типом HashMap (или тип, который вы предпочитаете).

@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
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...