encore une question lazy loading spring hibernate
Bonjour,
Oui encore une question sur ce sujet. Désolé mais si quelqu'un pouvait me donner une explication claire à un débutant ce serait sympathique.
Alors je me fais une petite appli de type magasin.
voici le service :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
@Transactional
public class StoreManagerImpl implements StoreManager {
@Autowired
private CustomerDAO customerDao;
@Autowired
private OrderDAO orderDao;
@Autowired
private ProductDAO productDao;
public void setCustomerDao(CustomerDAO customerDao) {
this.customerDao = customerDao;
}
public void setOrderDao(OrderDAO orderDao) {
this.orderDao = orderDao;
}
public void setProductDao(ProductDAO productDao) {
this.productDao = productDao;
}
@Transactional(readOnly=true)
public Product getProduct(int Id) {
return this.productDao.getProduct(Id);
}
public void addProduct(Product p) {
this.productDao.addProduct(p);
}
public void delProduct(Product p) {
this.productDao.delProduct(p);
}
public void updateProduct(Product p) {
this.productDao.updateProduct(p);
}
@Transactional(readOnly=true)
public Customer getCustomer(int Id) {
return this.customerDao.getCustomer(Id);
}
public void addCustomer(Customer c) {
this.customerDao.addCustomer(c);
}
public void delCustomer(Customer c) {
this.customerDao.delCustomer(c);
}
public void updateCustomer(Customer c) {
this.customerDao.updateCustomer(c);
}
@Transactional(readOnly=true)
public Order getOrder(int Id) {
return this.orderDao.getOrder(Id);
}
public void addOrder(Order o) {
this.orderDao.addOrder(o);
}
public void delOrder(Order o) {
this.orderDao.delOrder(o);
}
public void updateOrder(Order o) {
this.orderDao.updateOrder(o);
}
} |
le client :
public class Customer extends Person implements Serializable {
@OneToMany(mappedBy="customer")
private Collection<Order> CommandeList = new HashSet<Order>();
..........................
l'appli rempli la base et à un moment je souhaites lister la collection commande d'un client du genre
((Customer) StoreManagerImpl.getCustomer(1).getCommandList().size
le hql du dao ne fait pas de join sur les objets associés.
donc j'ai une :
org.hibernate.LazyInitializationException: failed to lazily initialize a collection
Même si je passe par un lazy hibernet j'aurais la même erreur car c'est en réalité à un proxy de spring que je m'adresse et celui-ci aura fermé la session.
Donc comment faire pour lazy loader au niveau de spring ?
Ps : Corrigez-moi si j'ai dit des énormités mais pardonnez un pauvre débutant.