出错信息:Exception in thread "main" org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: wind.rose.crm.entity.Product.orders, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at org.hibernate.collection.PersistentSet.hashCode(PersistentSet.java:411)
at wind.rose.crm.entity.Product.hashCode(Product.java:74)
at java.util.HashMap.put(HashMap.java:372)
at java.util.HashSet.add(HashSet.java:200)
at test.Test.main(Test.java:43)test.javapackage test;
import wind.rose.crm.entity.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import wind.rose.crm.customer.service.CustomerService;
import wind.rose.crm.customer.service.OrderService;
import wind.rose.crm.customer.service.ProductService;
import wind.rose.crm.customer.service.UserService;
import wind.rose.crm.entity.Customer;
import wind.rose.crm.entity.User;
import java.util.*;
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
OrderService orderService = (OrderService) ac.getBean("orderService");
Product p1 = orderService.findByProductName("p1");
Product p2 = orderService.findByProductName("p2");
Product p3 = orderService.findByProductName("p3");

Order order1 = new Order();
Customer c1 = orderService.findCustomerByName("mm1");
order1.setCustomer(c1);

Order order2 = new Order();
Customer c2 = orderService.findCustomerByName("mm2");
order2.setCustomer(c2);

Order order3 = new Order();
Customer c3 = orderService.findCustomerByName("mm3");
order3.setCustomer(c3);

order1.getProducts().add(p1);
order1.getProducts().add(p2);
order1.getProducts().add(p3);

order2.getProducts().add(p1);
order2.getProducts().add(p2);
order2.getProducts().add(p3);

order3.getProducts().add(p1);
order3.getProducts().add(p2);
order3.getProducts().add(p3);

p1.getOrders().add(order1);
p1.getOrders().add(order2);
p1.getOrders().add(order3);

p2.getOrders().add(order1);
p2.getOrders().add(order2);
p2.getOrders().add(order3);

p3.getOrders().add(order1);
p3.getOrders().add(order2);
p3.getOrders().add(order3);

orderService.addOrder(order1);
orderService.addOrder(order2);
orderService.addOrder(order3);
}
}
我想是这样的,orderService进行了findCustomerByName,findByProductName,addOrder的操作.
这几个操作中,我在service 的方法里面用spring标注事物的形式@Transactional(propagation=Propagation.REQUIRED)
几个方法都是如此设定的...可能是在起初的findCustomerByName完成之后,事物就提交了,后面的findByProductName无法得到上面的事物,
产生了以上错误...请教高手如何把几个操作修改在一个事物中,然后再提交