タイトルは少し誤解を招くかもしれませんが、アドバイスをお願いしたいと思います。
ここで、SpringMVCアプリをHibernateとトランザクションで構成したとしましょう。構成の一部は次のようになります。
<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
、DBアクセス権を管理するクラスへの私の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";
}
ご覧のとおり、マップされたクラスのstdコンソールリストに追加しようとしています。それはうまく機能しますが、これをより大きなプロジェクトでどのように管理すべきかについてのアドバイスが必要です。セッションを取得してトランザクションを開始するutilクラスが必要ですか?または、これを管理するためにいくつかのテンプレートを使用する必要がありますか?単に私はこれを書きたくない:
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//
//...
//
session.getTransaction().commit();
DBに接続する必要があるすべての場所で。多分私は何かを逃している、またはそれを完全に間違っているのですか?どんな助けでもいただければ幸いです