powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно сохранить в БД объект HashMap
6 сообщений из 6, страница 1 из 1
Как правильно сохранить в БД объект HashMap
    #38365755
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени. Я столкнулся со значительными трудностями, пытаясь осуществить описанное в заголовке темы. Начну с того, что раньше такого никогда делать не доводилось, получалоcь все корректно только для простых типов данных. Подробнее о том, что нужно. Есть некая таблица с id в качестве ключевого поля и объект HashMap, который тоже требуется сохранить в БД, не создавая для него отдельный entity-класс. Порывшись в интернете, выкопал такую конструкцию:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
@Entity
@Table(name="T_ACCOUNT")
public class Account implements ...  {

private Map<String,Float> weights;

    @ElementCollection
    @CollectionTable(name = "T_INVEST_PLAN_WEIGHT", joinColumns = @JoinColumn(name = "ACCOUNT_ID", referencedColumnName = "ID"))
    @MapKeyColumn(name = "key_column")
    @Column(name = "value_column")

    public Map<String, Float> getWeights() {
        return weights;
    }

    public void setWeights(Map<String, Float> weights) {
        this.weights = weights;
    }

}



Пустая таблица, разумеется, создается, но ума не приложу, как теперь корректно сохранить этот Map. Допустим, все выглядит так:

id таблицы Map связанная таблица после сохранения
------------ --------- id weight
1 <1, 0.05> -------------
7 <3, 1.22> 1 0.05
12 <7, 0.3> 7 0.3
15 <15, 0.4> 15 0.4
18 <20. 0.5>

Можно ли добиться такого результата, имея только Map? Или все-таки надо создавать метод, который будет анализировать каждый id из родительской таблицы и сравнивать его с id из Map? Повторюсь - сохранение таких объектов для меня вещь абсолютно новая, в интернете не нашел подходящего объяснения, поэтому рассчитываю на помощь русскоязычных и понимающих в этом деле товарищей. Заранее спасибо.
...
Рейтинг: 0 / 0
Как правильно сохранить в БД объект HashMap
    #38365763
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, эскиз таблиц получился кособоким, прилагаю графическое изображение.
...
Рейтинг: 0 / 0
Как правильно сохранить в БД объект HashMap
    #38366125
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все правильно, будет создана таблица T_INVEST_PLAN_WEIGHT с полями (ACCOUNT_ID,key_column,value_column), а в программе она будет видна как поле-карта. Работать с ней как с отдельной таблицей не придется, хибернейт представит ее в виде готового объекта. Например, при сохранении такого объекта
Account = {id:1, weights:{1:0.05, 2:0.06}}
в таблицу будет сохранено:
Код: plaintext
1.
2.
1 1 0.05
1 2 0.06
Единственное, не помешало бы карту сразу инициализировать, чтобы каждый раз не проверять на null:
Код: java
1.
private Map<String,Float> weights = new HashMap<String,Float>();
...
Рейтинг: 0 / 0
Как правильно сохранить в БД объект HashMap
    #38366165
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra , , спасибо за замечание про инициализацию карты - я как-то забыл впопыхах об этом. Указанный вами результат я уже получил, но он меня как бы не совсем устраивает. Допустим, Map такой: {<1, 0.5>,<2, 0.3>,<5, 0.8>,<7, 0.7>}, тогда при сохранении получается такая таблица (если в исходной таблицы есть id с номерами 1 и 2):

1 1 0.5
1 2 0.3
1 5 0.8
1 7 0.7
2 1 0.5
2 2 0.3
2 5 0.8
2 7 0.7

А мне бы хотелось получить такую:

1 1 0.5
2 2 0.3

т.е. чтобы значения вносились только в том случае, если id исходной таблицы равен key из карты. Можно ли сделать так?
...
Рейтинг: 0 / 0
Как правильно сохранить в БД объект HashMap
    #38366306
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полуламерне создавая для него отдельный entity-класс
imho
т.к. тебе нужен ID счётчик уже готовый из Map тогда нужно (для хибера) переопределять этот счётчик.
Забей на красивости. Ты просил - он сохранил.
...
Рейтинг: 0 / 0
Как правильно сохранить в БД объект HashMap
    #38366361
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 , ясно. В общем-то я сделал что хотел, правда, несколько уродским способом и без использования установок хайбернета.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно сохранить в БД объект HashMap
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]