Hi,
ich stehe gerade vor einem Problem in meinem Projekt. Über JPA wird ein Query erstellt und abgeschickt was irrsinnig lange dauert (>20s), wenn ich genau das Query nehme was intern gebaut wird und kleine Optimierungen mache bin ich bei 0.1s.
Wie kann ich Einfluss nehmen darauf was für ein Query aufgebaut wird?
[SQL]public interface MessageParamRepository extends JpaRepository<AbstractMessageParam, Long> {
List<AbstractMessageParam> findByMessage(Message message);
}
[/SQL]
Darüber wird aktuell ein Query automatisch generiert, was am Ende so aussieht
[SQL]select abstractme0_.id as id1_0_, abstractme0_.custom_fields as custom_f2_0_, abstractme0_.message_id as message_4_0_, abstractme0_.param_key as param_ke3_0_, abstractme0_.badge_number as badge_nu1_11_, abstractme0_.content_available as content_2_11_, abstractme0_.message_expiry_time as message_3_11_, abstractme0_.sound_file as sound_fi4_11_, abstractme0_.notification_type as notifica1_12_, abstractme0_.tile_back_background_image as tile_bac2_12_, abstractme0_.tile_back_content as tile_bac3_12_, abstractme0_.tile_back_title as tile_bac4_12_, abstractme0_.tile_background_image as tile_bac5_12_, abstractme0_.tile_count as tile_cou6_12_, abstractme0_.toast_parameter as toast_pa7_12_, abstractme0_.toast_subtitle as toast_su8_12_, abstractme0_.clazz_ as clazz_ from ( select id, custom_fields, param_key, message_id, null as badge_number, null as content_available, null as message_expiry_time, null as sound_file, null as notification_type, null as tile_back_background_image, null as tile_back_content, null as tile_back_title, null as tile_background_image, null as tile_count, null as toast_parameter, null as toast_subtitle, 1 as clazz_ from message_params_aos union select id, custom_fields, param_key, message_id, badge_number, content_available, message_expiry_time, sound_file, null as notification_type, null as tile_back_background_image, null as tile_back_content, null as tile_back_title, null as tile_background_image, null as tile_count, null as toast_parameter, null as toast_subtitle, 2 as clazz_ from message_params_ios union select id, custom_fields, param_key, message_id, null as badge_number, null as content_available, null as message_expiry_time, null as sound_file, notification_type, tile_back_background_image, tile_back_content, tile_back_title, tile_background_image, tile_count, toast_parameter, toast_subtitle, 3 as clazz_ from message_params_wos ) abstractme0_ left outer join messages message1_ on abstractme0_.message_id=message1_.id where message1_.id=?[/SQL]
und das hier läuft um Welten schneller
[SQL]select abstractme0_.id as id1_0_, abstractme0_.custom_fields as custom_f2_0_, abstractme0_.message_id as message_4_0_, abstractme0_.param_key as param_ke3_0_, abstractme0_.badge_number as badge_nu1_11_, abstractme0_.message_expiry_time as message_2_11_, abstractme0_.sound_file as sound_fi3_11_, abstractme0_.notification_type as notifica1_12_, abstractme0_.tile_back_background_image as tile_bac2_12_, abstractme0_.tile_back_content as tile_bac3_12_, abstractme0_.tile_back_title as tile_bac4_12_, abstractme0_.tile_background_image as tile_bac5_12_, abstractme0_.tile_count as tile_cou6_12_, abstractme0_.toast_parameter as toast_pa7_12_, abstractme0_.toast_subtitle as toast_su8_12_, abstractme0_.clazz_ as clazz_ from (
select id, custom_fields, param_key, message_id, badge_number, message_expiry_time, sound_file, null as notification_type, null as tile_back_background_image, null as tile_back_content, null as tile_back_title, null as tile_background_image, null as tile_count, null as toast_parameter, null as toast_subtitle, 1 as clazz_ from message_params_ios iosp WHERE iosp.message_id =253843 union
select id, custom_fields, param_key, message_id, null as badge_number, null as message_expiry_time, null as sound_file, null as notification_type, null as tile_back_background_image, null as tile_back_content, null as tile_back_title, null as tile_background_image, null as tile_count, null as toast_parameter, null as toast_subtitle, 2 as clazz_ from message_params_aos aosp WHERE aosp.message_id = 253843 union
select id, custom_fields, param_key, message_id, null as badge_number, null as message_expiry_time, null as sound_file, notification_type, tile_back_background_image, tile_back_content, tile_back_title, tile_background_image, tile_count, toast_parameter, toast_subtitle, 3 as clazz_ from message_params_wos wp WHERE wp.message_id =253843
) abstractme0_ left outer join messages message1_ on abstractme0_.message_id=message1_.id where message1_.id=253843;[/SQL]
ich habe halt bei den Sub Selects gleich noch die Mengen reduziert.
Wie bekomme ich das in JPA/Hibernate rein?