2012-04-05 8 views
3

Ich habe eine Klasse und 2 Many-to-one-Mappings in es, wie kann ich faul Last sieHibernate Many-to-one verzögertes Laden funktioniert nicht

Meine Eigenschaften

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

Mapping-Datei (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=? 

Welche Ansätze ich bisher versucht habe 1) set faul = "kein Proxy", sehe keine Änderung in der Anzahl der Abfragen.

2) Einstellung nicht gefunden = "Ausnahme".

3) Außen-join = „auto“

Kann jemand mir eine Lösung vorschlagen, diese zwei zusätzlichen Abfragen gefeuert wegen der eifrigen viele-zu-eins Beziehungen zu reduzieren?

Bitte notieren Sie sich die Fremdschlüssel-Beziehungen auf Viele-zu-eins.

Antwort

3

faul ist standardmäßig true. versuchen, lazy="proxy" loszuwerden.

Gründe für faule nicht funktioniert:

  • wenn das referenzierte Typ nicht proxied werden kann, weil es
  • der genannten Art mit <class lazy="false"
+0

abgebildet wird kein Standard-Konstruktor oder endgültige Methoden ist, können wir nicht setze faul = "true" auf einem Viele-zu-Eins. org.xml.sax.SAXParseException: Das Attribut "faul" mit dem Wert "true" muss einen Wert aus der Liste "falscher Proxy-Proxy" enthalten. Ich habe versucht "No-Proxy", aber immer noch das Problem des eifrigen Ladens besteht. Alle meine referenzierten Typen hat lazy = "true" – spirit3189

+0

Zugriff auf die Referenzen irgendwo in equals oder gethashcode vielleicht? – Firo

+0

hat dies das Problem gelöst? – rogerdpack