Hibernate lazy loading nicht mit viele-zu-eins-Zuordnung
Ich habe ein problem der Leistung in meinem viele-zu-eins-Zuordnung. Wenn ich Debuggen der SQL-Abfrage in der log-Datei der AUFTRAGGEBER Abfrage ist es ok, aber nachdem ich andere Abfrage, die viele-zu-eins-Objekt-mapping.
Entity.hbm.xml :
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.omb.database.mapping.MyEntity" table="MY_ENTITY">
<id name="id" type="java.lang.Integer">
<column name="ENTITY_ID"/>
<generator class="sequence">
<param name="sequence">SEQ_MY_ENTITY</param>
</generator>
</id>
<property name="prop1" type="string" column="PROP1" />
<many-to-one name="object1" column="OBJECT1_ID" class="com.omb.database.mapping.Object1" />
<many-to-one name="object2" column="OBJECT2_ID" class="com.omb.database.mapping.Object2" />
</class>
</hibernate-mapping>
Object1.hbm.xml :
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping default-lazy="true">
<class name="com.omb.database.mapping.Object1" table="TABLE_OBJECT_1">
<id name="id" type="java.lang.Integer" column="OBJECT1_ID" />
<property name="label" type="string" column="LABEL_OBJECT_1" length="15" />
</class>
</hibernate-mapping>
Object2.hbm.xml :
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping default-lazy="true">
<class name="com.omb.database.mapping.Object2" table="TABLE_OBJECT_2">
<id name="id" type="java.lang.Integer" column="OBJECT2_ID" />
<property name="label" type="string" column="LABEL_OBJECT_2" length="15" />
</class>
</hibernate-mapping>
Abfrage HBM :
public List<Entity> findByObject1Id(Integer object1Id) throws DataAccesException {
List<Entity> results = null;
try {
Query query = this.getSession().createQuery(
"from Entity ent where ent.object1.id = :object1Id");
query.setParameter("object1Id", object1Id);
results = query.list();
} catch (HibernateException hbe) {
throw new DataAccesException(hbe);
}
return results;
}
in pom.xml
<!-- Hibernate 3 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.ga</version>
<exclusions>
<exclusion>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
</exclusion>
<exclusion>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</exclusion>
<exclusion>
<groupId>asm</groupId>
<artifactId>asm-attrs</artifactId>
</exclusion>
</exclusions>
</dependency>
- Bitte zeigen Sie die Abfragen, die Sie sehen und geben Sie Ihre genaue Frage. Sind Sie Fragen, warum Sie sehen diese Abfragen? Sind Sie Fragen, wie man den code ändern/Konfiguration irgendwie ändern der Abfragen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, mit FetchMode.WÄHLEN Sie, wie diese;
Ihre Zuordnung scheint ok zu sein. Wie hier dokumentiert 5.1.1. Entity
Den
<class>
Attribut faul ist standardmäßig trueDas gleiche für
<many-to-one>
: 5.1.7.1. Mit einem Fremdschlüssel oder einem Verein Tabelle faul Attribut:lazy="no-proxy"
gibt an, dass die Eigenschaft sollte geholt werden träge, wenn die Instanz-variable zugegriffen wird. Dies erfordert build-time bytecode-Instrumentierung.lazy="false"
gibt an, dass der Verein immer eifrig abgeholt werden.Also, wo ist das Problem?
Ich würde sagen in Ihrer debug-Fenster. Denn du hast einen Verweis auf Ihrer Liste, und Sie beobachten das Ergebnis - im moment ist es ausgeführt - der Verweis wird auch geladen. Faul - aber geladen. Das ist in der Tat, was wir wollen. Proxy - wenn Erstens tuched - zwingt die Last.
Versuchen, Sie zu entfernen aus beobachten. Oder schließen Sie die Sitzung und setzen Sie ihn dann in der Uhr... sollten Sie sehen, welches die Abfrage der oben - wird nicht geladen Referenzen... nur, wenn Sie wirklich zugegriffen,... auch über die debug-Fenster