LINUX.ORG.RU

Как сохранить матрицу в БД?

 , ,


0

2

Как правильно сохранить в postgresql экземпляр вот такого класса:

@Table(name="matrix")
class Matrix {

@Id
@GeneratedValue
private Long id;

private int[][] data;

// getters, setters etc...
}

Каждый экземпляр этого класса может содержать матрицу различных размеров, число строк и столбцов варьируются.

Для записи поля data, как бинарного блоба, какие аннотации и типы данных в БД использовать? Буду рад любым примерам.


Я решал задачу хранения матницы в БД, но к сожалению у меня кода нету под рукой. Я делал все по аналогии с этой статьей https://vladmihalcea.com/how-to-map-java-and-sql-arrays-with-jpa-and-hibernate/ насколько я помню там достаточно заменить int[] на int[][] и все будет работать.

mythCreator ()
Ответ на: комментарий от Legioner

Сериализуй в XML

В текст согласен, но зачем такое порно с xml? Верно подсказывают - пусть просто числа в ряд, если матрица квадратная - так и подавно.

anonymous ()

Постгрес поддерживает и одномерные, и двумерные массивы. Если массив двумерный, но элементы разного размера, можно хранить в json(b)

какие аннотации ... использовать?

Выбрось недорм и аннотации, пиши на sql.

nikolnik ★★★ ()

Чтобы БД жизнь сахаром не казалась, храни каждый элемент отдельной записью. Если понадобятся разреженные матрицы, это может даже оказаться правильным решением, лол.

Алсо, у иклипслинка есть такая шляпа. Не помню, правда, из стандарта она или кастом.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от pol01

Фишка json(b) в том, что это json, по которому можно искать и строить индексы. Так же жсон позволяет хранить данные в произвольном порядке. Если ты в постгресе попытаешься в [][]ARRAY положить {{1,2,3}, {1,2}, {1,2,3} то оно тебе не разрешит, т.к. все массивы должны быть одинаковой длины, в случае с матрицами - это ок, в других случаях приходиться изощряться через жсон.

nikolnik ★★★ ()