Nano Hash - криптовалюты, майнинг, программирование

Сопоставление java.util.Map в объекте с помощью Hibernate

В моем текущем весеннем проекте я ищу способ отобразить поле, как в одном из моих объектов:

частный атрибут карты;

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

с этим я должен иметь возможность использовать что-то подобное для хранения данных для этого атрибута в моей базе данных:

<select name="..." multiple="multiple">
    <option value="..."> ... </option>
</select>

<textarea name="..."> ... </textarea>

где при выборе я выбираю один язык и набираю текстовое поле, я вставляю текст на выбранном языке.

В моих представлениях, реализованных с помощью тимелеафа, я хочу прочитать текст, связанный с языком пользователя.

Кто-нибудь может сказать мне, есть ли способ с помощью Hibernate отобразить такое поле od?


Ответы:


1

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

@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name = "FOO_TABLE", joinColumns = @JoinColumn(name = "fooId"))
@MapKeyColumn(name="mapKey")
@Column(name = "mapValue")
private Map<String, String> fooMap = new HashMap<String, String>();

Это означает, что FOO_TABLE будет иметь 4 столбца. Столбец ID в качестве первичного ключа, mapKey (varchar(255)), mapValue(varchar(255)) и fooId в качестве внешнего ключа.

Аннотации, примененные к карте, выполняют следующие функции:

@ElementCollection(fetch=FetchType.EAGER) — Сообщает Hibernate, что у вас есть коллекция элементов (String), и что эти элементы всегда следует извлекать с нетерпением. Примените это, если вы никогда не хотите, чтобы ваша карта была нулевой. С другой стороны, если получение карты является дорогостоящим запросом или карта будет особенно большой, и она вам не всегда нужна, вместо этого установите FetchType.LAZY. (См. здесь для подробного ознакомления с EAGER vs LAZY)

@CollectionTable — сообщает Hibernate, что значения вашей коллекции хранятся в таблице. Имя таблицы задается параметром name, а столбец FK задается с помощью аннотации @JoinColumn.

@MapKeyColumn — указывает на столбец, содержащий значения ключей карты.

@Column — указывает на столбец, содержащий значения для значений карты.

Вы можете легко изменить значения для @MapKeyColumnи @Column, если хотите.

Обратите внимание: если вы обнаружите, что не возвращаете отдельные значения на карте, попробуйте добавить @Fetch(FetchMode.SUBSELECT) в коллекцию. Это указывает на то, что Hibernate должен выбрать значения карты, а не пытаться присоединить их к вашему родителю.

11.02.2015
  • не могли бы вы взглянуть на этот вопрос таблицы"> stackoverflow.com/questions/41697714/? 17.01.2017

  • 2
    @OneToMany
    private Map<String, String> attribute;
    

    Добавьте @MapKeyColumn и/или @Column, если имена ваших столбцов не соответствуют значениям по умолчанию JPA. Используйте дженерики для вашей карты (Map<String, String>), чтобы вам не приходилось указывать типы вручную.

    11.02.2015
    Новые материалы

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

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..