Jpa @CollectionTable очень медленный запросJAVA

Программисты JAVA общаются здесь
Anonymous
Jpa @CollectionTable очень медленный запрос

Сообщение Anonymous »


У меня есть этот объект

@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 и собственный запрос. Я ожидал быстрого выполнения запроса, но выполнение происходит очень медленно, поскольку после запроса на соединение приложение делает запрос для каждого полученного муниципалитета, чтобы получить почтовые индексы.

Вернуться в «JAVA»