私は、hibernate.Iを使ってデータベースバックエンドを呼び出すjava Webアプリケーションを開発しています。テスト/デプロイメントのためにサーブレット、jsp、tomcatを使用しています。java -eeの多くの書籍は、本の例(Hibernate Recipes by Gary Mak)の例では、以下のようにジェネリックベースクラスと特定のサブクラスを作成しました。トランザクションを正しく管理するためのDAOクラスの実装
class BaseDao{
private Class persistentClass;
public BaseDao(Class persistentClass) {
super();
this.persistentClass = persistentClass;
}
public Object findById(Long id) {
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session = factory.openSession();
Object object = null;
try {
object = (Object) session.get(persistentClass, id);
return object;
}
finally {
session.close();
}
}
@Override
public void saveOrUpdate(Object obj) {
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.saveOrUpdate(obj);
tx.commit();
}catch(HibernateException e){
if (tx != null) {
tx.rollback();
}
throw e;
}finally {
session.close();
}
}
}
class SaleOrderDao extends BaseDao{
public SaleOrderDao() {
super(SaleOrder.class);
}
@Override
public SaleOrder findSaleOrderById(Long saleOrderId){
SaleOrder so = (SaleOrder)findById(saleOrderId);
return so;
}
@Override
public void saveOrUpdateSaleOrder(SaleOrder so){
saveOrUpdate(so);
}
}
このフォーラムでの投稿を通過しながら、私はライアン・スチュワートのadviceに出くわしたDAOメソッドでトランザクションを開始および終了することrecommended..Sadlyではないこと、私のプロジェクトは、サポートする任意のWebフレームワークを使用していませんトランザクション管理..そして私はJSP、サーブレットとサーブレットコンテナを使用することに限定されています。
私のDAOの実装を書き換えることができる方法はありますか?トランザクションは適切に管理できます。私が読んだ本から。
ホープ誰かが提案心から
で私を助け、
ジム
春を使用して終了します。そうでなければ、テストされておらず、文書化されていない既製のソリューションを無視して、テストされていないものや文書化されていないものを一緒に束ねる時間を取ることになります。 –
あなたは春を使うことができると仮定して、Nathanがスポットにいます。それ以外に、取引が何であるか理解していますか?私は謙遜にしようとしているわけではありませんが、特にあなたが自分のロールをとろうとする場合は、これを行うことが重要です。ウィキペディアの説明は冗長ですが正確です:http://en.wikipedia.org/wiki/Database_transaction 簡潔に言うと、txnは、すべて通過するか、ロールバックされる必要のある1つ以上のdbクエリです。ある口座から別の口座に口座を振り替える銀行を考えてみましょう。 1つのカウントは借方に記入し、もう1つは貸方に記入する1つの口座から引き落とされたにもかかわらず信用が失われた場合、あなたは「空白」にお金を送ってきました。 – Taylor
コメントありがとう – jimgardener