Я использую Struts2.3 + Spring 3.2.6 + Hibernate 3.X для своего веб-приложения.Spring HibernateDaoSupport создает несколько сеансов
Я использую аннотации для управления транзакцией. Мой класс DAO приведен ниже.
@Transactional(readOnly = true, rollbackFor={Exception.class})
public class CustomerDAOImpl extends HibernateDaoSupport implements CustomerDAO{
//adds the customer
@Transactional(propagation=Propagation.REQUIRED, rollbackFor = {Exception.class})
public void addCustomer(Customer customer){
Session session = getSession();
System.out.println("M1() Hash Code: --->"+session.hashCode()+ " Thread id: "+Thread.currentThread().getId());
//session.save(customer);
}
//return all the customers in list
// @Transactional(propagation=Propagation.REQUIRED, rollbackFor = {Exception.class})
@Transactional(readOnly = true)
public List<Customer> listCustomer(){
Session session = getSession();
System.out.println("M2() Hash Code: --->"+session.hashCode()+ " Thread id: "+Thread.currentThread().getId());
return null; //logic to get the list based on condition
}
Эти методы будут вызываться из уровня обслуживания, и это похоже на нижеследующее;
customerDAO.addCustomer(customer);
customerDAO.listCustomer();
Я получаю различных сессий для того же потока когда приведенный выше код выполняется.
Выход:
M1() Hash Code: --->5026724 Thread id: 21
M2() Hash Code: --->8899550 Thread id: 21
В связи с этим, если любое исключение приходит в method2() данные, которые сохранялись с помощью method1() не откатить.
Пожалуйста, дайте мне знать, как получить одиночную сессию на основе потока (если я поеду на свой собственный HibernateFactory, я потеряю управление транзакциями к весне), не потеряв управление весенними транзакциями.
Также добавьте tx: annotationdriven в свой весенний контекст приложения, чтобы весна управляла транзакцией – Waqar
Я пробовал. но все же транзакция не откат. – Daya
Вы добавили или , так как вы также используете AOP –
Waqar