在spring運用聲明事務時找錯(測試事務readOnly的異常拋出--異常類是runtimeexception),幾乎暈死了~還好最後找到了。汗@@@'''''''
找了一整天,幾乎要暈死~都怪自己沒基礎~~哎~總結,吸取教訓。。
問題:在一個有事務(聲明為唯讀)管理的方法中,特意進行增刪改,使其報異常錯誤~~
Service類如下(Service層,由spring注入dao save實體)
package com.itnetwork.ServiceImp; import javax.annotation.Resource; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import com.itnetwork.DaoImp.CategoryDaoImp; import com.itnetwork.DaoImp.NewsDaoImp; import com.itnetwork.Entity.Category; import com.itnetwork.Entity.News; @Component("testService") public class TestService { private NewsDaoImp newsDaoImp; public CategoryDaoImp getCategoryDaoImp() { return categoryDaoImp; } @Resource(name="categoryDaoImp") public void setCategoryDaoImp(CategoryDaoImp categoryDaoImp) { this.categoryDaoImp = categoryDaoImp; } private CategoryDaoImp categoryDaoImp; @Transactional(readOnly=true) public void add(News news) { newsDaoImp.saveNews(news); } @Transactional(readOnly=true) public void add(Category category) { categoryDaoImp.saveCategory(category); } public NewsDaoImp getNewsDaoImp() { return newsDaoImp; } @Resource(name="newsDaoImp") public void setNewsDaoImp(NewsDaoImp newsDaoImp) { this.newsDaoImp = newsDaoImp; } }
Dao類save方法如下(此為導致錯誤的代碼):
public void saveCategory(Category category) { //hibernateTemplate.save(category); Session session = sessionFactory.openSession();//.getCurrentSession(); session.save(category); }
原因分析:sessionFactory.openSession(),另外開闢了一個session,而不是使用當前session。