也許標題有點誤導,但我想問你一條建議。spring mvc hibernate正確的事務管理方式
現在,讓我們說我已經配置了我的spring mvc應用程序的休眠和事務。部分配置是這樣的:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="oracle.jdbc.OracleDriver"/>
<property name="jdbcUrl" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="user" value="xxx"/>
<property name="password" value="xxx"/>
<property name="maxPoolSize" value="10"/>
<property name="maxStatements" value="0"/>
<property name="minPoolSize" value="5"/>
</bean>
<!-- Session Factory Declaration -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
<property name="packagesToScan" value="com.execon.models"/>
</bean>
<!-- Enable the configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="txManager"/>
<!-- Transaction Manager is defined -->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
所以基本上我現在需要做的,僅僅是@Autowired
我sessinFactory類將管理數據庫訪問權限?
一個簡單的例子,雖然它與@Controller
,我將它移到@Service
:
@Resource(name = "sessionFactory")
private SessionFactory sessionFactory;
@RequestMapping(value = "/")
public String getMainPage(Model model)
{
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Query query = session.createQuery("from Period");
List<Period> list = query.list();
System.out.println(list);
session.getTransaction().commit();
return "MainPage";
}
正如你看到的,我只是試圖把一個映射類的性病控制檯名單上。它工作的很好,但我需要一個建議如何在更大的項目中進行管理。我應該有一些獲得會話和開始事務的util類嗎?或者我應該使用一些模板來管理它?只是我不想寫這個:
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//
//...
//
session.getTransaction().commit();
在我需要連接到數據庫的每一個地方。也許我錯過了什麼,或者完全錯誤?任何幫助,將不勝感激
請告訴我是否正確: 第一個問題:具有類範圍的@ Transactional意味着此類中的EVERY方法將使用事務權進行處理? 第二個問題:通過使我的POJO(Period類)'@ Transactional'完成了錯誤的事情嗎? 第三個問題:來自'org.springframework.orm.hibernate3'包的'getSession()'等於'org.springframework.orm.hibernate4'包中的'openSession()'? – kamil
Q1是的..你可以將整個班級設置爲交易...然後在每種方法上對其進行優化。 Q2沒有特別錯誤..整個spring的意思是使用POJO,使控制器交易的方法不是很好的風格,但是對於一個小項目,如果你可以測試的話。 Q3是的,它是一樣的..抱歉,沒有拿起hibernate4軟件包名稱...將更新答案 –