对于复杂的JOIN,Hibernate执行两个查询而不是一个查询

时间:2011-06-22 14:59:24

标签: java performance hibernate hql

我无法理解为什么我不能让Hibernate在单个查询中执行有点复杂的JOIN。我追捕了所有EAGER初始化的属性,并在HQL中加入它们或使它们成为LAZY。

Hibernate似乎在做什么,首先运行查询获取ID和列,然后再次获取列。看起来第一个查询具有第二个查询所具有的所有信息,因此它没有多大意义。

这是我的HQL:

FROM OrderItem oi
  JOIN FETCH oi.order o 
  JOIN FETCH o.market m 
  JOIN FETCH o.customer c 
  JOIN FETCH oi.orderItemStatus s 
  JOIN FETCH oi.product p 
  LEFT JOIN FETCH p.urlMapping url 
  LEFT JOIN FETCH url.market urlMarket 
WHERE oi.id = :itemId

第一个查询:

select
    orderitem0_.item_new_id as item1_46_0_,
    order1_.order_id as order1_44_1_,
    market2_.market_id as market1_35_2_,
    customer3_.customer_id as customer1_17_3_,
    orderitems4_.status_id as status1_49_4_,
    product5_.product_id as product1_55_5_,
    urlmapping6_.id as id81_6_,
    market7_.market_id as market1_35_7_,
    orderitem0_.item_affiliate_number as item2_46_0_,
    orderitem0_.item_amount_off as item3_46_0_,
    orderitem0_.item_cancel as item4_46_0_,
    orderitem0_.item_cancel_date as item5_46_0_,
    orderitem0_.item_completed as item6_46_0_,
    orderitem0_.item_completed_date as item7_46_0_,
    orderitem0_.item_create_proof as item8_46_0_,
    orderitem0_.item_created_on as item9_46_0_,
    orderitem0_.item_dol_doc_id as item10_46_0_,
    orderitem0_.item_dol_session_id as item11_46_0_,
    orderitem0_.item_designer_id as item45_46_0_,
    orderitem0_.item_discount_order_amount as item12_46_0_,
    orderitem0_.item_discount_total as item13_46_0_,
    orderitem0_.item_unitprice_group as item14_46_0_,
    orderitem0_.item_is_reorder as item15_46_0_,
    orderitem0_.item_is_sample as item16_46_0_,
    orderitem0_.item_stock as item17_46_0_,
    orderitem0_.item_number as item18_46_0_,
    orderitem0_.item_quantity_rerun as item19_46_0_,
    orderitem0_.item_market_id as item46_46_0_,
    orderitem0_.item_needby as item20_46_0_,
    orderitem0_.item_mark_as_noncomposite as item21_46_0_,
    orderitem0_.item_note as item22_46_0_,
    orderitem0_.item_reason_hold as item23_46_0_,
    orderitem0_.order_id as order47_46_0_,
    orderitem0_.status_id as status48_46_0_,
    orderitem0_.item_unitprice_original as item24_46_0_,
    orderitem0_.item_parent_id as item25_46_0_,
    orderitem0_.pathway_id as pathway26_46_0_,
    orderitem0_.item_pause_at_status_id as item49_46_0_,
    orderitem0_.item_pause_at_reason as item27_46_0_,
    orderitem0_.item_percent_off as item28_46_0_,
    orderitem0_.product_id as product50_46_0_,
    orderitem0_.item_proof_creation_date as item29_46_0_,
    orderitem0_.item_quantity as item30_46_0_,
    orderitem0_.item_rerun_type_list as item31_46_0_,
    orderitem0_.item_reviewed as item32_46_0_,
    orderitem0_.item_saly as item33_46_0_,
    orderitem0_.item_saly_type as item34_46_0_,
    orderitem0_.item_saly_order as item35_46_0_,
    orderitem0_.item_sequence as item36_46_0_,
    orderitem0_.item_ship_date as item37_46_0_,
    orderitem0_.item_ship_with as item38_46_0_,
    orderitem0_.substrate_id as substrate51_46_0_,
    orderitem0_.item_total as item39_46_0_,
    orderitem0_.item_tracking_number as item40_46_0_,
    orderitem0_.item_unitprice as item41_46_0_,
    orderitem0_.item_upsell as item42_46_0_,
    orderitem0_.item_user_approval_initials as item43_46_0_,
    orderitem0_.item_wrapper as item44_46_0_,
    order1_.order_paid_amount as order2_44_1_,
    order1_.order_bill_address1 as order3_44_1_,
    order1_.order_bill_address2 as order4_44_1_,
    order1_.order_bill_city as order5_44_1_,
    order1_.order_bill_company as order6_44_1_,
    order1_.order_bill_country as order7_44_1_,
    order1_.order_bill_email as order8_44_1_,
    order1_.order_bill_fax as order9_44_1_,
    order1_.order_bill_first as order10_44_1_,
    order1_.order_bill_last as order11_44_1_,
    order1_.order_bill_phone as order12_44_1_,
    order1_.order_bill_state as order76_44_1_,
    order1_.order_bill_zip as order13_44_1_,
    order1_.order_committed as order14_44_1_,
    order1_.order_completed as order15_44_1_,
    order1_.order_completed_date as order16_44_1_,
    order1_.order_email_conf_sent as order17_44_1_,
    order1_.order_contact_address_id as order77_44_1_,
    order1_.customer_id as customer78_44_1_,
    order1_.order_crs_id as order79_44_1_,
    order1_.order_designer_id as order80_44_1_,
    order1_.order_discount_subtotal as order18_44_1_,
    order1_.order_discount_total as order19_44_1_,
    order1_.order_event_date_as_date as order20_44_1_,
    order1_.order_event_date as order21_44_1_,
    order1_.order_fx_rate as order22_44_1_,
    order1_.order_discount_group as order23_44_1_,
    order1_.order_discount_pricedrift as order24_44_1_,
    order1_.order_internal as order25_44_1_,
    order1_.order_invoice as order26_44_1_,
    order1_.order_invoice_number as order27_44_1_,
    order1_.order_ip_address as order28_44_1_,
    order1_.order_host as order29_44_1_,
    order1_.order_item_count as order30_44_1_,
    order1_.order_latitude as order31_44_1_,
    order1_.order_longitude as order32_44_1_,
    order1_.market_id as market81_44_1_,
    order1_.order_notes as order33_44_1_,
    order1_.order_clone_id as order82_44_1_,
    order1_.order_number as order34_44_1_,
    order1_.order_total as order35_44_1_,
    order1_.order_paid as order36_44_1_,
    order1_.gateway_id as gateway83_44_1_,
    order1_.order_date as order37_44_1_,
    order1_.order_product_total as order38_44_1_,
    order1_.order_product_discount as order39_44_1_,
    order1_.order_proof_format as order40_44_1_,
    order1_.order_proof_send_to as order41_44_1_,
    order1_.order_po_number as order42_44_1_,
    order1_.order_receive_marketing as order43_44_1_,
    order1_.order_web_ref_id as order44_44_1_,
    order1_.region_id as region84_44_1_,
    order1_.order_roi_matched as order45_44_1_,
    order1_.sector_id as sector85_44_1_,
    order1_.order_service_total as order46_44_1_,
    order1_.order_service_discount as order47_44_1_,
    order1_.order_ship_blind as order48_44_1_,
    order1_.order_ship_date as order49_44_1_,
    order1_.order_ship_address1 as order50_44_1_,
    order1_.order_ship_address2 as order51_44_1_,
    order1_.order_ship_residential as order52_44_1_,
    order1_.order_shipping_cost as order53_44_1_,
    order1_.order_ship_city as order54_44_1_,
    order1_.order_ship_company as order55_44_1_,
    order1_.order_ship_country as order56_44_1_,
    order1_.order_discount_shipping as order57_44_1_,
    order1_.order_ship_first as order58_44_1_,
    order1_.order_ship_last as order59_44_1_,
    order1_.order_shipping_method as order60_44_1_,
    order1_.order_ship_state as order86_44_1_,
    order1_.order_shipping_total as order61_44_1_,
    order1_.order_ship_zip as order62_44_1_,
    order1_.order_source as order63_44_1_,
    order1_.order_subindustry_code as order64_44_1_,
    order1_.order_subtotal as order65_44_1_,
    order1_.order_tax_exempt as order66_44_1_,
    order1_.order_tax_exemptable as order67_44_1_,
    order1_.order_tax_product as order68_44_1_,
    order1_.order_tax_rate as order69_44_1_,
    order1_.order_tax_service as order70_44_1_,
    order1_.order_tax_shipping as order71_44_1_,
    order1_.order_tax as order72_44_1_,
    order1_.order_transfer as order73_44_1_,
    order1_.order_transfer_date as order74_44_1_,
    order1_.order_type_id as order75_44_1_,
    market2_.market_allow_alt_payment as market2_35_2_,
    market2_.market_auto_applied_discount_code as market30_35_2_,
    market2_.market_brand_logo as market3_35_2_,
    market2_.market_brand_password as market4_35_2_,
    market2_.market_brand as market5_35_2_,
    market2_.market_browse_banner_location as market6_35_2_,
    market2_.market_cart_banner_hide_type_ids as market7_35_2_,
    market2_.market_cart_banner_location as market8_35_2_,
    market2_.market_cart_banner_show_type_ids as market9_35_2_,
    market2_.market_cart_banner_title as market10_35_2_,
    market2_.market_consumer as market11_35_2_,
    market2_.market_phone as market12_35_2_,
    market2_.market_default_cart_settings as market13_35_2_,
    market2_.market_default_gateway_id as market31_35_2_,
    market2_.market_description as market14_35_2_,
    market2_.market_details_banner_location as market15_35_2_,
    market2_.market_disable as market16_35_2_,
    market2_.market_allow_dol as market17_35_2_,
    market2_.market_force_dol as market18_35_2_,
    market2_.market_allow_ground_shipping as market19_35_2_,
    market2_.market_allow_group_discount as market20_35_2_,
    market2_.market_homepage_url as market21_35_2_,
    market2_.market_css as market22_35_2_,
    market2_.market_footer as market23_35_2_,
    market2_.market_header as market24_35_2_,
    market2_.market_orderable as market25_35_2_,
    market2_.market_allow_gateway_change as market26_35_2_,
    market2_.market_base as market27_35_2_,
    market2_.market_html as market28_35_2_,
    market2_.sector_id as sector32_35_2_,
    market2_.market_taxexempt as market29_35_2_,
    customer3_.customer_company as customer2_17_3_,
    customer3_.customer_default_market_id as customer13_17_3_,
    customer3_.customer_default_subindustry_code as customer3_17_3_,
    customer3_.customer_default_sector_id as customer14_17_3_,
    customer3_.customer_default_ship_blind as customer4_17_3_,
    customer3_.customer_disable as customer5_17_3_,
    customer3_.customer_merge_check_date as customer6_17_3_,
    customer3_.customer_merge_to as customer7_17_3_,
    customer3_.customer_name as customer8_17_3_,
    customer3_.customer_reseller_id as customer9_17_3_,
    customer3_.customer_tax_id as customer10_17_3_,
    customer3_.customer_title as customer11_17_3_,
    customer3_.customer_web_created as customer12_17_3_,
    orderitems4_.status_description as status2_49_4_,
    orderitems4_.status_web_description as status3_49_4_,
    product5_.product_active_date as product2_55_5_,
    product5_.product_batch_code as product3_55_5_,
    product5_.product_cart_banner_hide_type_ids as product4_55_5_,
    product5_.product_cart_banner_location as product5_55_5_,
    product5_.product_cart_banner_show_type_ids as product6_55_5_,
    product5_.product_classification_id as product46_55_5_,
    product5_.product_clone_id as product47_55_5_,
    product5_.product_converted_to_imprints as product7_55_5_,
    product5_.product_default_crs_id as product48_55_5_,
    product5_.product_description as product8_55_5_,
    product5_.product_designer_choice_date as product9_55_5_,
    product5_.product_designer_name as product10_55_5_,
    product5_.product_allow_designer_notes as product11_55_5_,
    product5_.product_details_banner_location as product12_55_5_,
    product5_.product_disable as product13_55_5_,
    product5_.product_display_web as product14_55_5_,
    product5_.product_family_image_location as product15_55_5_,
    product5_.product_family_medium_location as product16_55_5_,
    product5_.product_family_small_location as product17_55_5_,
    product5_.product_family_thumbnail_location as product18_55_5_,
    product5_.product_family_xs_location as product19_55_5_,
    product5_.product_family_xl_location as product20_55_5_,
    product5_.product_image_location as product21_55_5_,
    product5_.product_imprint_description as product22_55_5_,
    product5_.product_imprintable as product23_55_5_,
    product5_.product_indesign_template as product24_55_5_,
    product5_.product_medium_location as product25_55_5_,
    product5_.product_netsuite_id as product26_55_5_,
    product5_.product_netsuite_update as product27_55_5_,
    product5_.product_outofstock as product28_55_5_,
    product5_.product_outofstock_description as product29_55_5_,
    product5_.product_processor_code as product30_55_5_,
    product5_.product_discount_code as product31_55_5_,
    product5_.product_rank as product32_55_5_,
    product5_.product_seo_title as product33_55_5_,
    product5_.product_shipping_notes as product34_55_5_,
    product5_.product_small_location as product35_55_5_,
    product5_.product_status_id as product49_55_5_,
    product5_.product_stylecode as product36_55_5_,
    product5_.template_id as template50_55_5_,
    product5_.product_template_location as product37_55_5_,
    product5_.product_template_metadata as product38_55_5_,
    product5_.product_thumbnail_location as product39_55_5_,
    product5_.product_xs_location as product40_55_5_,
    product5_.type_id as type51_55_5_,
    product5_.product_shakespeare as product41_55_5_,
    product5_.product_vipp as product42_55_5_,
    product5_.product_web_description as product43_55_5_,
    product5_.product_xl_location as product44_55_5_,
    product5_.product_xml_location as product45_55_5_,
    urlmapping6_.market_id as market4_81_6_,
    urlmapping6_.product_id as product5_81_6_,
    urlmapping6_.static_filename as static2_81_6_,
    urlmapping6_.url as url81_6_,
    market7_.market_allow_alt_payment as market2_35_7_,
    market7_.market_auto_applied_discount_code as market30_35_7_,
    market7_.market_brand_logo as market3_35_7_,
    market7_.market_brand_password as market4_35_7_,
    market7_.market_brand as market5_35_7_,
    market7_.market_browse_banner_location as market6_35_7_,
    market7_.market_cart_banner_hide_type_ids as market7_35_7_,
    market7_.market_cart_banner_location as market8_35_7_,
    market7_.market_cart_banner_show_type_ids as market9_35_7_,
    market7_.market_cart_banner_title as market10_35_7_,
    market7_.market_consumer as market11_35_7_,
    market7_.market_phone as market12_35_7_,
    market7_.market_default_cart_settings as market13_35_7_,
    market7_.market_default_gateway_id as market31_35_7_,
    market7_.market_description as market14_35_7_,
    market7_.market_details_banner_location as market15_35_7_,
    market7_.market_disable as market16_35_7_,
    market7_.market_allow_dol as market17_35_7_,
    market7_.market_force_dol as market18_35_7_,
    market7_.market_allow_ground_shipping as market19_35_7_,
    market7_.market_allow_group_discount as market20_35_7_,
    market7_.market_homepage_url as market21_35_7_,
    market7_.market_css as market22_35_7_,
    market7_.market_footer as market23_35_7_,
    market7_.market_header as market24_35_7_,
    market7_.market_orderable as market25_35_7_,
    market7_.market_allow_gateway_change as market26_35_7_,
    market7_.market_base as market27_35_7_,
    market7_.market_html as market28_35_7_,
    market7_.sector_id as sector32_35_7_,
    market7_.market_taxexempt as market29_35_7_ 
from
    order_item orderitem0_ 
inner join
    order_master order1_ 
        on orderitem0_.order_id=order1_.order_id 
inner join
    market market2_ 
        on order1_.market_id=market2_.market_id 
inner join
    customer_list customer3_ 
        on order1_.customer_id=customer3_.customer_id 
inner join
    order_status orderitems4_ 
        on orderitem0_.status_id=orderitems4_.status_id 
inner join
    product product5_ 
        on orderitem0_.product_id=product5_.product_id 
left outer join
    url_mapping urlmapping6_ 
        on product5_.product_id=urlmapping6_.product_id 
left outer join
    market market7_ 
        on urlmapping6_.market_id=market7_.market_id 
where
    orderitem0_.item_new_id=?

然后在query.uniqueResult():

之后运行以下内容
select
    orderitems0_.order_id as order47_44_6_,
    orderitems0_.item_new_id as item1_6_,
    orderitems0_.item_new_id as item1_46_5_,
    orderitems0_.item_affiliate_number as item2_46_5_,
    orderitems0_.item_amount_off as item3_46_5_,
    orderitems0_.item_cancel as item4_46_5_,
    orderitems0_.item_cancel_date as item5_46_5_,
    orderitems0_.item_completed as item6_46_5_,
    orderitems0_.item_completed_date as item7_46_5_,
    orderitems0_.item_create_proof as item8_46_5_,
    orderitems0_.item_created_on as item9_46_5_,
    orderitems0_.item_dol_doc_id as item10_46_5_,
    orderitems0_.item_dol_session_id as item11_46_5_,
    orderitems0_.item_designer_id as item45_46_5_,
    orderitems0_.item_discount_order_amount as item12_46_5_,
    orderitems0_.item_discount_total as item13_46_5_,
    orderitems0_.item_unitprice_group as item14_46_5_,
    orderitems0_.item_is_reorder as item15_46_5_,
    orderitems0_.item_is_sample as item16_46_5_,
    orderitems0_.item_stock as item17_46_5_,
    orderitems0_.item_number as item18_46_5_,
    orderitems0_.item_quantity_rerun as item19_46_5_,
    orderitems0_.item_market_id as item46_46_5_,
    orderitems0_.item_needby as item20_46_5_,
    orderitems0_.item_mark_as_noncomposite as item21_46_5_,
    orderitems0_.item_note as item22_46_5_,
    orderitems0_.item_reason_hold as item23_46_5_,
    orderitems0_.order_id as order47_46_5_,
    orderitems0_.status_id as status48_46_5_,
    orderitems0_.item_unitprice_original as item24_46_5_,
    orderitems0_.item_parent_id as item25_46_5_,
    orderitems0_.pathway_id as pathway26_46_5_,
    orderitems0_.item_pause_at_status_id as item49_46_5_,
    orderitems0_.item_pause_at_reason as item27_46_5_,
    orderitems0_.item_percent_off as item28_46_5_,
    orderitems0_.product_id as product50_46_5_,
    orderitems0_.item_proof_creation_date as item29_46_5_,
    orderitems0_.item_quantity as item30_46_5_,
    orderitems0_.item_rerun_type_list as item31_46_5_,
    orderitems0_.item_reviewed as item32_46_5_,
    orderitems0_.item_saly as item33_46_5_,
    orderitems0_.item_saly_type as item34_46_5_,
    orderitems0_.item_saly_order as item35_46_5_,
    orderitems0_.item_sequence as item36_46_5_,
    orderitems0_.item_ship_date as item37_46_5_,
    orderitems0_.item_ship_with as item38_46_5_,
    orderitems0_.substrate_id as substrate51_46_5_,
    orderitems0_.item_total as item39_46_5_,
    orderitems0_.item_tracking_number as item40_46_5_,
    orderitems0_.item_unitprice as item41_46_5_,
    orderitems0_.item_upsell as item42_46_5_,
    orderitems0_.item_user_approval_initials as item43_46_5_,
    orderitems0_.item_wrapper as item44_46_5_,
    market1_.market_id as market1_35_0_,
    market1_.market_allow_alt_payment as market2_35_0_,
    market1_.market_auto_applied_discount_code as market30_35_0_,
    market1_.market_brand_logo as market3_35_0_,
    market1_.market_brand_password as market4_35_0_,
    market1_.market_brand as market5_35_0_,
    market1_.market_browse_banner_location as market6_35_0_,
    market1_.market_cart_banner_hide_type_ids as market7_35_0_,
    market1_.market_cart_banner_location as market8_35_0_,
    market1_.market_cart_banner_show_type_ids as market9_35_0_,
    market1_.market_cart_banner_title as market10_35_0_,
    market1_.market_consumer as market11_35_0_,
    market1_.market_phone as market12_35_0_,
    market1_.market_default_cart_settings as market13_35_0_,
    market1_.market_default_gateway_id as market31_35_0_,
    market1_.market_description as market14_35_0_,
    market1_.market_details_banner_location as market15_35_0_,
    market1_.market_disable as market16_35_0_,
    market1_.market_allow_dol as market17_35_0_,
    market1_.market_force_dol as market18_35_0_,
    market1_.market_allow_ground_shipping as market19_35_0_,
    market1_.market_allow_group_discount as market20_35_0_,
    market1_.market_homepage_url as market21_35_0_,
    market1_.market_css as market22_35_0_,
    market1_.market_footer as market23_35_0_,
    market1_.market_header as market24_35_0_,
    market1_.market_orderable as market25_35_0_,
    market1_.market_allow_gateway_change as market26_35_0_,
    market1_.market_base as market27_35_0_,
    market1_.market_html as market28_35_0_,
    market1_.sector_id as sector32_35_0_,
    market1_.market_taxexempt as market29_35_0_,
    orderitems2_.status_id as status1_49_1_,
    orderitems2_.status_description as status2_49_1_,
    orderitems2_.status_web_description as status3_49_1_,
    product3_.product_id as product1_55_2_,
    product3_.product_active_date as product2_55_2_,
    product3_.product_batch_code as product3_55_2_,
    product3_.product_cart_banner_hide_type_ids as product4_55_2_,
    product3_.product_cart_banner_location as product5_55_2_,
    product3_.product_cart_banner_show_type_ids as product6_55_2_,
    product3_.product_classification_id as product46_55_2_,
    product3_.product_clone_id as product47_55_2_,
    product3_.product_converted_to_imprints as product7_55_2_,
    product3_.product_default_crs_id as product48_55_2_,
    product3_.product_description as product8_55_2_,
    product3_.product_designer_choice_date as product9_55_2_,
    product3_.product_designer_name as product10_55_2_,
    product3_.product_allow_designer_notes as product11_55_2_,
    product3_.product_details_banner_location as product12_55_2_,
    product3_.product_disable as product13_55_2_,
    product3_.product_display_web as product14_55_2_,
    product3_.product_family_image_location as product15_55_2_,
    product3_.product_family_medium_location as product16_55_2_,
    product3_.product_family_small_location as product17_55_2_,
    product3_.product_family_thumbnail_location as product18_55_2_,
    product3_.product_family_xs_location as product19_55_2_,
    product3_.product_family_xl_location as product20_55_2_,
    product3_.product_image_location as product21_55_2_,
    product3_.product_imprint_description as product22_55_2_,
    product3_.product_imprintable as product23_55_2_,
    product3_.product_indesign_template as product24_55_2_,
    product3_.product_medium_location as product25_55_2_,
    product3_.product_netsuite_id as product26_55_2_,
    product3_.product_netsuite_update as product27_55_2_,
    product3_.product_outofstock as product28_55_2_,
    product3_.product_outofstock_description as product29_55_2_,
    product3_.product_processor_code as product30_55_2_,
    product3_.product_discount_code as product31_55_2_,
    product3_.product_rank as product32_55_2_,
    product3_.product_seo_title as product33_55_2_,
    product3_.product_shipping_notes as product34_55_2_,
    product3_.product_small_location as product35_55_2_,
    product3_.product_status_id as product49_55_2_,
    product3_.product_stylecode as product36_55_2_,
    product3_.template_id as template50_55_2_,
    product3_.product_template_location as product37_55_2_,
    product3_.product_template_metadata as product38_55_2_,
    product3_.product_thumbnail_location as product39_55_2_,
    product3_.product_xs_location as product40_55_2_,
    product3_.type_id as type51_55_2_,
    product3_.product_shakespeare as product41_55_2_,
    product3_.product_vipp as product42_55_2_,
    product3_.product_web_description as product43_55_2_,
    product3_.product_xl_location as product44_55_2_,
    product3_.product_xml_location as product45_55_2_,
    urlmapping4_.id as id81_3_,
    urlmapping4_.market_id as market4_81_3_,
    urlmapping4_.product_id as product5_81_3_,
    urlmapping4_.static_filename as static2_81_3_,
    urlmapping4_.url as url81_3_,
    market5_.market_id as market1_35_4_,
    market5_.market_allow_alt_payment as market2_35_4_,
    market5_.market_auto_applied_discount_code as market30_35_4_,
    market5_.market_brand_logo as market3_35_4_,
    market5_.market_brand_password as market4_35_4_,
    market5_.market_brand as market5_35_4_,
    market5_.market_browse_banner_location as market6_35_4_,
    market5_.market_cart_banner_hide_type_ids as market7_35_4_,
    market5_.market_cart_banner_location as market8_35_4_,
    market5_.market_cart_banner_show_type_ids as market9_35_4_,
    market5_.market_cart_banner_title as market10_35_4_,
    market5_.market_consumer as market11_35_4_,
    market5_.market_phone as market12_35_4_,
    market5_.market_default_cart_settings as market13_35_4_,
    market5_.market_default_gateway_id as market31_35_4_,
    market5_.market_description as market14_35_4_,
    market5_.market_details_banner_location as market15_35_4_,
    market5_.market_disable as market16_35_4_,
    market5_.market_allow_dol as market17_35_4_,
    market5_.market_force_dol as market18_35_4_,
    market5_.market_allow_ground_shipping as market19_35_4_,
    market5_.market_allow_group_discount as market20_35_4_,
    market5_.market_homepage_url as market21_35_4_,
    market5_.market_css as market22_35_4_,
    market5_.market_footer as market23_35_4_,
    market5_.market_header as market24_35_4_,
    market5_.market_orderable as market25_35_4_,
    market5_.market_allow_gateway_change as market26_35_4_,
    market5_.market_base as market27_35_4_,
    market5_.market_html as market28_35_4_,
    market5_.sector_id as sector32_35_4_,
    market5_.market_taxexempt as market29_35_4_ 
from
    order_item orderitems0_ 
left outer join
    market market1_ 
        on orderitems0_.item_market_id=market1_.market_id 
left outer join
    order_status orderitems2_ 
        on orderitems0_.status_id=orderitems2_.status_id 
left outer join
    product product3_ 
        on orderitems0_.product_id=product3_.product_id 
left outer join
    url_mapping urlmapping4_ 
        on product3_.product_id=urlmapping4_.product_id 
left outer join
    market market5_ 
        on urlmapping4_.market_id=market5_.market_id 
where
    orderitems0_.order_id=?

如何调整此查询以使其执行单个调用?

2 个答案:

答案 0 :(得分:3)

这是一个简单的问题,我错过了Order和OrderItem之间的循环依赖。订单急切地加载OrderItems所以当我检索并订购OrderItem时,它认为需要两次获取项目,一次用于查找,一次用于订单上的热切加入。

这实际上是有道理的,因为我只会在原始查询中查询我查询订单的项目,第二个查询是获取其余项目。

所以有两种解决方案:

  1. 不关心其他项目并使Order.orderItems懒惰
  2. 专门为Order的orderItems集合添加JOIN FETCH语句
  3. 第一个对整个应用程序有影响,因为通常预期项目会在那里。当我实际上只需要单个项而不是订单上的所有内容时,第二个增长查询。

    我开始认为EAGER加载选项不应该可用,并且开发人员必须编写HQL或Criteria来获取连接对象以避免第一个选项的失败,但是我还喜欢编写strait SQL:P。

答案 1 :(得分:-2)

如果您想要更多地控制查询,请使用iBatis。

相关问题