Zu allererst: Ich fange gerade erst mit Hibernate an. Ich bin ein Buch am durcharbeiten, und versuche die Bsp nachzuvollziehen. Ich habe folgende Objekte:
User
Code:
package HibernateGWT.client;
import com.google.gwt.user.client.rpc.IsSerializable;
public class User implements IsSerializable {
public long id;
public String username;
public String password;
public User() {}
public User( String username, String password ) {
this.username = username;
this.password = password;
}
...getter/setter kommen hier
und ein Objekt Advert
Code:
package HibernateGWT.client;
import com.google.gwt.user.client.rpc.IsSerializable;
public class Advert implements IsSerializable {
public long id;
public String title;
public String message;
public User user;
public Advert( String title, String message, User user ) {
this.title = title;
this.message = message;
this.user = user;
}
public Advert() {}
...getter/setter
Meine Hibernate mapping Dateien sehen so aus:
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="HibernateGWT.client.User" table="users">
<id name="id" type="long" column="id">
<generator class="increment"/>
</id>
<property name="username" column="name" type="java.lang.String"/>
<property name="password" column="password" type="java.lang.String"/>
</class>
</hibernate-mapping>
bzw.
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="HibernateGWT.client.Advert" table="adverts">
<id name="id" column="id" type="long">
<generator class="increment"/>
</id>
<property name="title" type="java.lang.String" column="title"/>
<property name="message" type="java.lang.String" column="message"/>
<many-to-one name="user" column="user_id" class="HibernateGWT.client.User" not-null="true"/>
</class>
</hibernate-mapping>
Ich habe eine Methode die folgendes macht
Code:
public Advert[] getAdvert( User user ) {
Session session = getSessionFactory().openSession();
Query q = session.createQuery("from Advert where user = :userId");
q.setLong( "userId", user.id );
List<Advert> adverts = (List<Advert>) q.list();
session.close();
return adverts.toArray( new Advert[adverts.size()] );
}
Lasse ich diese Methode durch den Debugger laufen, dann läd Hibernate interessanterweise nicht ein User Objekt sondern in der Debuggeranzeige,wird als Wert für ein Userobjekt in einem Advert-Objekt folgendes angezeigt: org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer@2d16a5
Statt eines User-Objekts zeigt mir der Debugger als Wert für ein User-Objekt in einem Advert-Objekt "User_$$_javassist_1" an.
Wieso wird kein User-Objekt geladen? Es ist nämlich für meine Anwendung wichtig, dass das User-Objekt richtig dargestellt wird.