Jpa @CollectionTable очень медленный запрос ⇐ JAVA
Jpa @CollectionTable очень медленный запрос
У меня есть этот объект
@Entity @Table(name = "GEO_MUNICIPALITY", индексы = { @Index(name = "idx_municialityentity", columnsList = "PROVINCE_CODE") }) ... общественный класс МуниципалитетEntity { @Идентификатор @Column(name = "MUNICIPALITY_CODE", nullable = false) частный строковый код; @Column (обнуляемый = ложь) частное имя строки; @ManyToOne(выборка = FetchType.LAZY) @JoinColumn(name = "PROVINCE_CODE") частная провинцияОбъект провинции; @ElementCollection @CollectionTable(name = "GEO_MUNICIPALITY_POSTAL_CODE", joinColumns = @JoinColumn(name = "КОД_МУНИЦИПАЛИТЕТА"), индексы = { @Index(name = "idx_municipalityentity_postal_code", columnsList = "MUNICIPALITY_CODE") }) @Column(name = "POSTAL_CODE") частный список postalCodeList; } @Entity @Table(name = "GEO_PROVINCE") ... общественный класс ПровинцияЕнтити { @Идентификатор @Column (обнуляемый = ложь) частный строковый код; ... } Теперь моему API нужно отобразить все муниципалитеты (со всеми почтовыми индексами муниципалитетов) с заданным кодом провинции, поэтому у меня есть такой класс репозитория:
@Repository общедоступный интерфейс МуниципалитетJpaRepository расширяет JpaRepository { List findAllByProvinceCode (строковая провинция); @Query («выберите m из Муниципального объекта m слева присоединиться к m.postalCodeList postalCodeList, где m.province.code = ?1») List findByCode(String code); } Эти два метода делают одно и то же, и я попробовал оба способа (результат один и тот же), потому что когда я вызываю getPostalCodeList(), запрос выполняется очень медленно, потому что он делает выбор для каждого результат муниципалитета (для получения почтовых индексов).
Как я могу улучшить производительность? Кроме того, поскольку я всегда ищу муниципалитеты по коду, стоит ли сделать индекс таким, как в коде? Спасибо!
Я пробовал использовать репозиторий jpa и собственный запрос. Я ожидал быстрого выполнения запроса, но выполнение происходит очень медленно, поскольку после запроса на соединение приложение делает запрос для каждого полученного муниципалитета, чтобы получить почтовые индексы.
У меня есть этот объект
@Entity @Table(name = "GEO_MUNICIPALITY", индексы = { @Index(name = "idx_municialityentity", columnsList = "PROVINCE_CODE") }) ... общественный класс МуниципалитетEntity { @Идентификатор @Column(name = "MUNICIPALITY_CODE", nullable = false) частный строковый код; @Column (обнуляемый = ложь) частное имя строки; @ManyToOne(выборка = FetchType.LAZY) @JoinColumn(name = "PROVINCE_CODE") частная провинцияОбъект провинции; @ElementCollection @CollectionTable(name = "GEO_MUNICIPALITY_POSTAL_CODE", joinColumns = @JoinColumn(name = "КОД_МУНИЦИПАЛИТЕТА"), индексы = { @Index(name = "idx_municipalityentity_postal_code", columnsList = "MUNICIPALITY_CODE") }) @Column(name = "POSTAL_CODE") частный список postalCodeList; } @Entity @Table(name = "GEO_PROVINCE") ... общественный класс ПровинцияЕнтити { @Идентификатор @Column (обнуляемый = ложь) частный строковый код; ... } Теперь моему API нужно отобразить все муниципалитеты (со всеми почтовыми индексами муниципалитетов) с заданным кодом провинции, поэтому у меня есть такой класс репозитория:
@Repository общедоступный интерфейс МуниципалитетJpaRepository расширяет JpaRepository { List findAllByProvinceCode (строковая провинция); @Query («выберите m из Муниципального объекта m слева присоединиться к m.postalCodeList postalCodeList, где m.province.code = ?1») List findByCode(String code); } Эти два метода делают одно и то же, и я попробовал оба способа (результат один и тот же), потому что когда я вызываю getPostalCodeList(), запрос выполняется очень медленно, потому что он делает выбор для каждого результат муниципалитета (для получения почтовых индексов).
Как я могу улучшить производительность? Кроме того, поскольку я всегда ищу муниципалитеты по коду, стоит ли сделать индекс таким, как в коде? Спасибо!
Я пробовал использовать репозиторий jpa и собственный запрос. Я ожидал быстрого выполнения запроса, но выполнение происходит очень медленно, поскольку после запроса на соединение приложение делает запрос для каждого полученного муниципалитета, чтобы получить почтовые индексы.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Очень неожиданная производительность fprintf против std::ofstream (fprintf очень медленный)
Anonymous » » в форуме C++ - 0 Ответы
- 84 Просмотры
-
Последнее сообщение Anonymous
-