2011-10-17 15 views
0

Hibernate3.6-Spring 3.1にはアプリケーションがあります。サービス層はストアドプロシージャとパラメータについて知っていますか?

私は

public abstract class GenericDaoImpl<T, ID extends Serializable> implements  GenericDao<T, ID> 
{ 

    public int executeSP(final String SP_NAME, Map<String, Object> params) 
    { 
    SQLQuery sq = getSession().createSQLQuery(SP_NAME);       
    sq.setProperties(params);  
    return sq.executeUpdate(); 

    } 
} 

http://www.ibm.com/developerworks/java/library/j-genericdao/index.html)、このような私のジェネリックDAOのIMPLを持っており、このサービス実装

@Transactional 
public class PejlAnalysisServiceImpl implements PejlAnalysisService, InitializingBean 
{ 
     private CisternDao cisternDao; 
     private PejlDataDao pejlDataDao; 

     private GenericDao genericDao; // <-- THIS? 

    private void test() 
    { 
      Map<String, Object> params = new HashMap<String, Object>(); 
      params.put("PARAM1",100); //AND THIS 
      genericDao.executeSP("MY_STORED_PROCEDURE", params); //And THIS 
    } 
} 

が、これは実際にそれを行うには正しい方法は何ですか?

P.S.ストアドプロシージャは異なるデータベーステーブルを処理するため、特定のDAO implに属しません。

答えて

0

実際のデザインによって異なります。私が書いたもう少し小さなプロジェクトでは、単一のストアドプロシージャがデータを格納する唯一の方法であったため、他のコンポーネントが使用するStoredProcedureオブジェクトがありました。私は最初にストアドプロシージャを避けることをお勧めしますが、もしあなたがそれらに抱かれているなら、あなたはあなたのデザインにとってどれほど重要なのかを決めなければなりません。それらはビジネスロジックの重要な部分か、永続性レイヤーの実装の詳細なのでしょうか?

+0

これらは5つのSPしかないにもかかわらず、実際にはアプリケーションのコアである、Ryanにとって不可欠です。多くの計算が行われています。そして私はなぜ彼らがストアドプロシージャでそれをすることを決めたのか分かりません。あ、はい。私はそれに立ち往生しています。 –

+2

だから、サービス層のSPの知識がアプリの主要な部分であるため適切であるように思えるだろう。あなたが言っているように、彼らはDAOのいずれの種類にも属していないので、あなたが考慮する1つのことはあなたのDAO階層からそれらを分離することです。 「StoredProcedureManager」やそのような行に沿ったもののような、自分の家を与えるほうが良いかもしれません。 –

+0

ありがとうございました。複数のストアドプロシージャを処理するために私自身のStoredProcedureManagerを実装しました。 :-) –

関連する問題