Не работает отложенная загрузка в режиме гибернации "многие к одному"

У меня есть класс и 2 сопоставления "многие-к-одному", как я могу их лениво загружать

Мои свойства

**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 names ApplicationFolder 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) установите lazy = "no-proxy", не вижу никаких изменений в количестве запросов.

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

3) external-join = "авто"

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

Обратите внимание на отношения внешнего ключа по схеме многие-к-одному.


person spirit3189    schedule 05.04.2012    source источник


Ответы (1)


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

Причины ленивого неработающего:

  • когда ссылочный тип не может быть проксирован, потому что нет конструктора по умолчанию или окончательных методов
  • ссылочный тип отображается с <class lazy="false"
person Firo    schedule 07.04.2012
comment
Мы не можем установить lazy = true для многих-к-одному. org.xml.sax.SAXParseException: Атрибут lazy со значением true должен иметь значение из списка false proxy no-proxy. Я пробовал использовать no-proxy, но проблема с нетерпеливой загрузкой все еще сохраняется. Все мои ссылочные типы имеют lazy = true - person spirit3189; 07.04.2012
comment
вы получаете доступ к ссылкам где-нибудь в equals или, может быть, gethashcode? - person Firo; 08.04.2012