Сопоставление строки json [] с табличным вопросом

Я извлекаю API для сайта, и мой Джейсон возвращает что-то вроде:

{  
   "stats":{  
      "corners":[  
         "11",
         "1"
      ],
      "yellowcards":[  
         "1",
         "3"
      ],
      "redcards":[  
         "0",
         "0"
      ],
      "penalties":[  
         "0",
         "0"
      ],
      "substitutions":[  
         "0",
         "0"
      ],
      "attacks":[  
         "51",
         "51"
      ],
      "dangerous_attacks":[  
         "32",
         "31"
      ],
      "on_target":[  
         "5",
         "7"
      ],
      "off_target":[  
         "13",
         "5"
      ],
      "possession_rt":[  
         "55",
         "45"
      ]
   }
}

Я попытался преобразовать это в класс Java, и вот как это выглядит:

пакет com.events.bettingevents.results;

import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;

@Entity
@Table(name="resbet_stats")
public class Stats implements Serializable
{
    private String[] off_target;
    private String[] possession_rt;
    private String[] redcards;
    private String[] dangerous_attacks;
    private String[] corners;
    private String[] substitutions;
    private String[] on_target;
    private String[] yellowcards;
    private String[] attacks;
    private String[] penalties;
    private String[] goals;
    private Long statsId;
    private Results results;


    @OneToOne(mappedBy = "stats")
    public Results getResults() {
        return results;
    }

    public void setResults(Results results) {
        this.results = results;
    }

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO,generator="native")
    @GenericGenerator(name = "native",strategy = "native" )
    @Column(name="stats_id")
    public Long getStatsId() {
        return statsId;
    }

    public void setStatsId(Long statsId) {
        this.statsId = statsId;
    }

    @Column(name="goals")
    public String[] getGoals() {
        return goals;

    }

    public void setGoals(String[] goals) {
        this.goals = goals;

    }

    @Column(name="off_target")
    public String[] getOff_target ()
    {
       return off_target;

    }

    public void setOff_target (String[] off_target)
    {
        this.off_target = off_target;

    }

    @Column(name="possession_rt")
    public String[] getPossession_rt ()
    {
        return possession_rt;

    }

    public void setPossession_rt (String[] possession_rt)
    {
        this.possession_rt = possession_rt;

    }

    @Column(name="redcards")
    public String[] getRedcards ()
    {
        return redcards;

    }

    public void setRedcards (String[] redcards)
    {
        this.redcards = redcards;

    }

    @Column(name="dangerous_attacks")
    public String[] getDangerous_attacks ()
    {
        return dangerous_attacks;

    }

    public void setDangerous_attacks (String[] dangerous_attacks)
    {
        this.dangerous_attacks = dangerous_attacks;

    }

    @Column(name="corners")
    public String[] getCorners ()
    {
        return corners;

    }

    public void setCorners (String[] corners)
    {
        this.corners = corners;

    }

    @Column(name="substitutions")
    public String[] getSubstitutions ()
    {
        return substitutions;

    }

    public void setSubstitutions (String[] substitutions)
    {
        this.substitutions = substitutions;

    }

    @Column(name="on_target")
    public String[] getOn_target ()
    {
        return on_target;

    }

    public void setOn_target (String[] on_target)
    {
        this.on_target = on_target;

    }

    @Column(name="yellowcards")
    public String[] getYellowcards ()
    {
        return yellowcards;

    }

    public void setYellowcards (String[] yellowcards)
    {
        this.yellowcards = yellowcards;

    }


    @Column(name="attacks")
    public String[] getAttacks (){
        return attacks;
    }

    public void setAttacks (String[] attacks){
        this.attacks = attacks;

    }

    @Column(name="penalties")
    public String[] getPenalties ()
    {
        return penalties;

    }


    public void setPenalties (String[] penalties)
    {
        this.penalties = penalties;

    }


}



Can someone suggest what datatype for table columns should I use? Is it blob? I created all my columns as `varchar`(10).

Я получаю такие ошибки, как (например):

Неверное строковое значение: '\ xAC \ xED \ x00 \ x05ur ...' для столбца «атаки» в строке 1 : : : Спасибо за помощь заранее.

Я использую только тип данных varchar для всех своих столбцов.

Edgar Allan Potenciano 10.09.2018 07:39

Не храните String[] в колонне. Узнать о @OneToMany, @ManyToMany

Jens 10.09.2018 07:51

Да, JPA пытается вставить поля ваших классов Stats в базу данных. Он не знает, как преобразовать строковый массив в строковый тип, чтобы настроить базу данных.

Sam Orozco 10.09.2018 08:02
1
3
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте ElementCollection для хранения коллекций строк. Что-то вроде:

@ElementCollection
@CollectionTable(name="my_collection_table", joinColumns=@JoinColumn(name="stats_id"))
public Collection<String> getGoals(){
    return goals;
}

Вам необходимо создать таблицу для каждой из ваших коллекций со значением столбца и внешним ключом, который ссылается на объект-владелец.

Другие вопросы по теме