Есть ли способ сопоставления с Map & lt; String, String & gt; из запроса? [dубликат]

Как отмечали другие, это микро-оптимизация.

(В политике или журналистике это известно как пуповизна; -)

Является ли программа достаточно большой для имеют более чем несколько уровней вызовов функции / метода / подпрограммы?

Если это так, вероятно, были некоторые предотвратимые вызовы, и они могут тратить сотни раз на столько же времени, как и на невысокую неэффективность.

В предположении, что вы удалили те (что мало кто делает), тогда, во что бы то ни стало, запустите его 10 ^ 9 раз под секундомером и посмотрите, что быстрее.

82
задан corydoras 4 August 2010 в 02:48
поделиться

2 ответа

JPA 2.0 поддерживает коллекции примитивов через аннотацию @ElementCollection , которую вы можете использовать в сочетании с поддержкой коллекций java.util.Map . Что-то вроде этого должно работать:

  @Entity public class Example {@Id long id;  // .... @ElementCollection @MapKeyColumn (name = "name") @Column (name = "value") @CollectionTable (name = "example_attributes", joinColumns = @ JoinColumn (name = "example_id")) Map & lt; String  , String & gt;  attributes = new HashMap & lt; String, String & gt; ();  // карты из имени атрибута в значение}  

См. также (в спецификации JPA 2.0)

  • 2.6 - Коллекции встраиваемых классов и основных типов
  • 2.7 Карта Коллекции
  • 10.1.11 - ElementCollection Annotation
  • 11.1.29 MapKeyColumn Аннотации
159
ответ дан Pascal Thivent 16 August 2018 в 02:45
поделиться
  • 1
    Именно это. Я пытался использовать & quot; @ ElementCollection & quot; аннотация, но не могла заставить его работать! – corydoras 3 August 2010 в 06:26
  • 2
    Существует ли обходное решение для этого, используя JPA 1? Я нашел примеры с Map & lt; String, SomeOtherClass & gt; – L. Holanda 8 April 2014 в 00:06
  • 3
    Стоит отметить, что example_attributes должен иметь составной ключ (example_id, name) - это то, что hbm2ddl будет генерировать из вышеизложенного. – James Bassett 20 November 2014 в 23:47
  • 4
  • 5
    Используя MariaDB, я столкнулся с Указанный ключ был слишком длинным; Максимальная длина ключа составляет 767 байт . Первичный ключ, который он пытается создать, представляет собой комбинацию varchar (255) и @JoinColumn, которая превышает размер столбца по умолчанию. Вам нужно либо изменить вашу базу данных , либо изменить ваш @MapKeyColumn, чтобы предоставить длину: @MapKeyColumn (name = & quot; name & quot ;, length = 100) – Jon 9 September 2016 в 18:48
  @ElementCollection (fetch = FetchType.LAZY) @CollectionTable (name = "raw_events_custom", joinColumns = @JoinColumn (name = "raw_event_id")) @MapKeyColumn (name = "field_key", length = 50) @  Столбец (name = "field_val", length = 100) @BatchSize (size = 20) private Map & lt; String, String & gt;  customValues ​​= new HashMap & lt; String, String & gt; ();   

Это пример того, как настроить карту с контролем над именами столбцов и таблиц и длиной поля.

11
ответ дан wciesiel 16 August 2018 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: