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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Partager