У нас есть большая таблица с большим количеством столбцов. После того, как мы перешли в MySQL Cluster, таблица не может быть создана из-за:
ОШИБКА 1118 (42000): Размер строки слишком большой. Максимальный размер строки для используемого типа таблицы, не считая BLOB, составляет 14000. Это включает в себя накладные расходы на хранение, проверьте руководство. Вы должны изменить некоторые столбцы на TEXT или BLOB
В качестве примера:
@Entity @Table (name = "appconfigs", schema = "myproject")
public class AppConfig implements Serializable
{
@Id @Column (name = "id", nullable = false)
@GeneratedValue (strategy = GenerationType.IDENTITY)
private int id;
@OneToOne @JoinColumn (name = "app_id")
private App app;
@Column(name = "param_a")
private ParamA parama;
@Column(name = "param_b")
private ParamB paramb;
}
Это таблица для хранения параметров конфигурации. Я думал, что мы можем объединить несколько столбцов в один и сохранить его как объект JSON и преобразовать его в некоторый объект Java.
Например:
@Entity @Table (name = "appconfigs", schema = "myproject")
public class AppConfig implements Serializable
{
@Id @Column (name = "id", nullable = false)
@GeneratedValue (strategy = GenerationType.IDENTITY)
private int id;
@OneToOne @JoinColumn (name = "app_id")
private App app;
@Column(name = "params")
//How to specify that this should be mapped to JSON object?
private Params params;
}
Где мы определили:
public class Params implements Serializable
{
private ParamA parama;
private ParamB paramb;
}
Используя это, мы можем объединить все столбцы в один и создать нашу таблицу. Или мы можем разбить всю таблицу на несколько таблиц. Лично я предпочитаю первое решение.
В любом случае мой вопрос заключается в том, как сопоставить столбец Params, который является текстом, и содержит строку JSON объекта Java?