2012-04-05 2 views
3

У меня есть класс и 2 много-к-одному отображений в нем, как я могу ленивым загружать ихHibernate Многие к одному ленивая загрузка не работает

Мои свойства

**teneo.mapping.also_map_as_class=true 
teneo.mapping.set_proxy=true 
teneo.mapping.mapping_file_name=/lazy.hbm.xml** 

Отображение файла (lazy.hbm.xml)

<class name="EnvironmentImpl" entity-name="**Environment**" abstract="false" lazy="true" discriminator-value="Environment" table="`ENVIRONMENT`" proxy="Environment"> 
    <meta attribute="eclassName">Environment</meta> 

    <property name="name" lazy="false" insert="true" update="true" not-null="true" unique="false" type="java.lang.String"> 
     <column not-null="true" unique="false" name="`NAME`"/> 
    </property> 

    <property name="description" lazy="false" insert="true" update="true" not-null="false" unique="false" type="java.lang.String"> 
     <column not-null="false" unique="false" name="`DESCRIPTION`" length="512"/> 
    </property> 

    <property name="contact" lazy="false" insert="true" update="true" not-null="false" unique="false" type="java.lang.String"> 
     <column not-null="false" unique="false" name="`CONTACT`"/> 
    </property> 

    <many-to-one name="rootAppFolder" entity-name="ApplicationFolder" lazy="proxy" cascade="all" foreign-key="ENVIRONMENT_ROOTAPPFOLDER" insert="true" update="true" not-null="false" unique="true"> 
     <column not-null="false" unique="false" name="`APPLICATINFLDER_RTAPPFOLDER_ID`"/> 
    </many-to-one> 

    <many-to-one name="serviceVirtualization" entity-name="ServiceVirtualization" lazy="proxy" cascade="all" foreign-key="ENVIRNMENT_SERVICEVIRTALIZATIN" insert="true" update="true" not-null="false"> 
     <column not-null="false" unique="false" name="`SRVCVRTLZTN_SRVICVIRTLIZTIN_ID`"/> 
    </many-to-one> 
</class> 

As you can see class Environment has 2 many-to-one's with namesApplicationFolder and serviceVirtualization.

for a HQL query like - from Environment where name = :name 


    Which internally triggers 3 queries 
    Query1 : Environment (this is right) 

    Query2 : ApplicationFolder (wrong.lazy loading should not.) 

    Query 3 : serviceVirtualization (wrong.lazy loading should not.) 



      DEBUG - select environmen0_."NAME" as NAME4_31_, environmen0_."DESCRIPTION" as DESCRIPT5_31_, environmen0_."CONTACT" as CONTACT6_31_, environmen0_."APPLICATINFLDER_RTAPPFOLDER_ID" as APPLICAT7_31_, environmen0_."SRVCVRTLZTN_SRVICVIRTLIZTIN_ID" as SRVCVRTL8_31_ from "ENVIRONMENT" environmen0_ where environmen0_."NAME"=? 

      DEBUG - select applicatio0_.e_id as e1_43_0_, applicatio0_.version_ as version3_43_0_, applicatio0_."NAME" as NAME4_43_0_, applicatio0_."ENVIRONMENT_ENV_E_ID" as ENVIRONM5_43_0_ as APPLICAT8_43_0_ from "APPLICATIONFOLDER" applicatio0_ where applicatio0_.e_id=? 

      DEBUG - select servicevir0_.e_id as e1_35_0_, servicevir0_.version_ as version3_35_0_, servicevir0_.econtainer_class as econtainer4_35_0_, servicevir0_.e_container as e5_35_0_, servicevir0_.e_container_featureid as e6_35_0_ from "SERVICEVIRTUALIZATION" servicevir0_ where servicevir0_.e_id=? 

Какие подходы я пробовал до сих пор 1) set lazy = "no-proxy", не вижу изменений в количестве запросов.

2) установка not-found = "exception".

3) внешнее_соединение = «авто»

Может ли один предложить мне решение, чтобы уменьшить эти 2 дополнительных запросов уволят из-за нетерпеливых отношений многие-к-одному?

Пожалуйста, обратите внимание на отношения внешнего ключа на много-к-одному.

ответ

3

lazy is true по умолчанию. попробуйте избавиться от lazy="proxy".

причины ленивый не работает:

  • когда тип ссылки не могут быть проксированными, потому что нет конструктора не по умолчанию, или конечные метод
  • типа ссылки отображаются с <class lazy="false"
+0

Мы не можем установите lazy = "true" на много-к-одному. org.xml.sax.SAXParseException: Атрибут «lazy» со значением «true» должен иметь значение из списка «false proxy no-proxy». Я попробовал «no-proxy», но проблема с постоянной загрузкой сохраняется. Все мои ссылочные типы имеют lazy = «true» – spirit3189

+0

, вы можете получить доступ к ссылкам где-нибудь на равных или gethashcode? – Firo

+0

это устранило проблему? – rogerdpack

Смежные вопросы