Hi every body ,
I m new to hibernate and i have a problem in loading a collection from the database
I have user class
Code:
package helper;
import java.util.HashSet;
import java.util.Set;
public class User {
private Long id;
private String first_name;
private String second_name;
private String user_name;
private String password;
private Set addresses;
private Set phone;
private String email;
private boolean admin;
private Department department;
public User(String first_name,String second_name,String user_name,String password
,String email){
this.first_name=first_name;
this.second_name=second_name;
this.user_name=user_name;
this.password=password;
this.email=email;
addresses=new HashSet();
phone=new HashSet();
}
public User(){
first_name="first";
second_name="second";
user_name="user name";
password="password";
email="email@yahoo.com";
addresses=new HashSet();
phone=new HashSet();
}
// getters and setters
and Address class:
Code:
package helper;
public class Address {
private Long id;
private User user;
private String country;
private String city;
private String street;
private String building;
private int appartment;
public Address(){
country="default";
city="default";
street="default";
building="default";
appartment=0;
}
public Address(String country,String city,String street,
String building,String appartment){
this.country=country;
this.city=city;
this.street=street;
this.building=building;
if(appartment !=null && appartment.length()>0)
this.appartment=Integer.parseInt(appartment);
else
this.appartment=0;
}
//getters and setters
The user class mapping is:
Code:
<?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 package="helper">
<class name="User" table="user_table"
dynamic-update="true">
<id name="id"
column="user_id"
>
<generator class="native"/>
</id>
<property name="first_name"
column="user_first_name"
type="string"/>
<property name="second_name"
column="user_second_name"
type="string"/>
<property name="user_name"
column="user_name"
type="string"/>
<property name="password"
column="user_password"
type="string"/>
<set name="addresses"
outer-join="true"
inverse="true"
cascade="all-delete-orphan">
<key column="address_id" />
<one-to-many class="Address" />
</set>
<set name="phone"
inverse="true"
cascade="all-delete-orphan">
<key column="user_phone" />
<one-to-many class="Phone"/>
</set>
<property name="email"
column="user_email"
type="string"/>
<property name="admin"
column="user_admin"
type="boolean"/>
<many-to-one name="department"
column="user_department"/>
</class>
</hibernate-mapping>
the address class mapping is:
Code:
<?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 package="helper">
<class name="Address" table="address_table" dynamic-update="true">
<id name="id"
column="address_id">
<generator class="native"/>
</id>
<many-to-one
name="user"
column="user_id"
class="helper.User"
not-null="true"/>
<property name="country"
column="address_country"
type="string"/>
<property name="city"
column="address_city"
type="string"/>
<property name="street"
column="address_street"
type="string"/>
<property name="building"
column="address_building"
type="string"/>
<property name="appartment"
column="address_appartment"
type="int"/>
</class>
</hibernate-mapping>
I have no problem saving the user and its associated collection of addresses but i have a problem retrieving the collection
when i run this code
Code:
Vector usersVector=null;
SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
Session newSession=sessionFactory.openSession();
Transaction transaction=newSession.beginTransaction();
java.util.List results= newSession.createCriteria(User.class).setFetchMode("addresses", FetchMode.EAGER).addOrder(Order.asc("first_name")).list();
Iterator iter=results.iterator();
if(iter.hasNext())
usersVector=new Vector();
while(iter.hasNext()){
User user=(User)iter.next();
usersVector.add(user);
}
for(int i=0;i<usersVector.size();i++){
User user=(User) usersVector.elementAt(i);
Iterator it=user.getAddresses().iterator();
Address ad=null;
if(it.hasNext())
ad=(Address)it.next();
System.out.println("____user____"+user.getFirst_name());
System.out.println("_____ad_____"+ad);
if(ad !=null)
System.out.println("____country__"+ad.getCountry());
}
transaction.commit();
newSession.close();
i do not get any errors but i get
____user____Sarah
_____ad_____null
____user____Tonny
_____ad_____null
could any body please tell me what am i doing wrong??
Thanks in advance