I can provide some example code:
CommitTransaction closes the session also and beginTransaction get's a new one from SessionFactory.getCurrentSession() ... as recommended.
If you look at the produced output, the "from Film" direktion works as expected, but the "from Customer" direction doesn't - Films are loaded eagerly. And no, the toString() method of customer doesn't touch the films set ...
So I've no Idea, what's wrong.
Kind regards,
Michael
Btw -I'm very impressed by the output of the second "System.out.println("Customer ClassName: " + film.getCustomer().getClass().getName() );" in queryDataFromFilm method - good idea and tough work :-)
Code:
private void insertAndWireData() {
System.out.println("+++++++++++++++ insertAndWire +++++++++++++++++++");
// insert
beginTransaction();
Film film1 = new Film(1111, "Der mit dem Wolf tanzt");
Film film2 = new Film(2222, "Herr der Ringe");
Film film3 = new Film(3333, "King Kong");
getSession().save(new Film(4444, "Jagd auf Roter Oktober"));
customer1 = new Customer("Fritz Frei");
customer1.addFilm(film1);
customer1.addFilm(film2);
customer1.addFilm(film3);
getSession().save(customer1);
getSession().save(new Customer("Bernd Bauer"));
commit();
}
private void queryDataFromFilm() {
System.out.println("+++++++++++++++ queryDataFromFilm +++++++++++++++++++");
beginTransaction();
List<Film> films = getSession().createQuery("from Film").list();
for (Film film : films) {
System.out.println(film);
if(film.getCustomer() != null) {
System.out.println("Customer ClassName: " + film.getCustomer().getClass().getName() );
System.out.println("Customer.id: " + film.getCustomer().getId());
System.out.println("Customer: " + film.getCustomer());
System.out.println("Customer ClassName: " + film.getCustomer().getClass().getName() );
}
System.out.println();
}
commit();
}
@SuppressWarnings("unchecked")
private void queryDataFromCustomer() {
System.out.println("+++++++++++++++ queryDataFromCustomer +++++++++++++++++++");
beginTransaction();
Customer customer = (Customer) getSession().get(Customer.class, customer1.getId());
System.out.println(customer);
System.out.println("Films ClassName: " + customer.getFilms().getClass().getName());
System.out.println("Films.size: " + customer.getFilms().size());
System.out.println("Films: " + customer.getFilms());
System.out.println();
commit();
}
Code:
Produced output:
+++++++++++++++ queryDataFromFilm +++++++++++++++++++
Hibernate:
select
film0_.id as id0_,
film0_.FK_CUSTOMER as FK4_0_,
film0_.inventarNr as inventarNr0_,
film0_.title as title0_
from
Film film0_
Film: 4444, Jagd auf Roter Oktober
Film: 3333, King Kong
Customer ClassName: b_MappingErweitert.e_Lazy.model.Customer$$EnhancerByCGLIB$$4693929a
Customer.id: 3
Hibernate:
select
customer0_.id as id1_0_,
customer0_.name as name1_0_
from
Customer customer0_
where
customer0_.id=?
Customer: Customer: 3, Fritz Frei
Customer ClassName: b_MappingErweitert.e_Lazy.model.Customer
...
+++++++++++++++ queryDataFromCustomer +++++++++++++++++++
Hibernate:
select
customer0_.id as id1_0_,
customer0_.name as name1_0_
from
Customer customer0_
where
customer0_.id=?
Hibernate:
select
films0_.FK_CUSTOMER as FK4_1_,
films0_.id as id1_,
films0_.id as id0_0_,
films0_.FK_CUSTOMER as FK4_0_0_,
films0_.inventarNr as inventarNr0_0_,
films0_.title as title0_0_
from
Film films0_
where
films0_.FK_CUSTOMER=?
Customer: 3, Fritz Frei
Films ClassName: org.hibernate.collection.PersistentSet
Films.size: 3
Films: [Film: 1111, Der mit dem Wolf tanzt, Film: 2222, Herr der Ringe, Film: 3333, King Kong]