2011-12-23 9 views
1

が、私は次のような形式のOracleのストアドプロシージャがあるとSQLクエリにパラメータとしてエンティティを渡す:私は私のJavaアプリケーションから呼び出す必要があるので、私は次のようにsql-queryを作っ休止 -

procedure validate_entity1(p_id number, p_property1 varchar2, p_property2 varchar2); 

この:

<sql-query name="q1" callable="true"> 
    <!-- . . . --> 
    { call validate_entity1(:id, :property1, :property2) } 
</sql-query> 

そして、私はこのクエリを作成して、手ですべてのこれらのプロパティをバインドします。

session.createNamedQuery("q1").setEntity("entity1", myEntity1); 

しかし、それは動作しません。私が本当にしたいと思うことは、このように、全体のエンティティをバインドすることです。何とかこれを行うことは可能ですか?

答えて

0

エンティティをストアドプロシージャのパラメータに直接マッピングすることはできません。 パラメータを1つずつ渡す必要があります。

を私はプロシージャ「rex_datainterface.getfieldtype」を起動していると私は2つのパラメータを渡します:

  • recoTypeを(あなたがストアドプロシージャを呼び出したいとあなたが春を持っている場合は、これをしようとした場合

    NUMBER)IN。

  • 結果(CURSOR)OUT。

    @Component 
        public class RexFieldTypeDAO { 
    
        @Resource(name = "REXDataSource") 
        private DataSource lyxsrvREXDataSource; 
    
    // ------------------------------------------------------------------------ 
    
    public RexFieldTypeDAO() { 
    } 
    
    // ------------------------------------------------------------------------ 
    
    public RecordSetDTO getFieldTypes(int recoType) { 
        RecordSetDTO res; 
    
        GetFieldTypeStoredProcedure proc = new GetFieldTypeStoredProcedure(lyxsrvREXDataSource); 
        res = proc.execute(recoType); 
    
        return res; 
    } 
    
    /** 
    * Private class used to access Stored Procedure. 
    */ 
    private static class GetFieldTypeStoredProcedure extends StoredProcedure { 
        private static final String SQL = "rex_datainterface.getfieldtype"; 
    
        public GetFieldTypeStoredProcedure(DataSource dataSource) { 
         super(dataSource, SQL); 
         setFunction(true); 
         declareParameter(new SqlOutParameter("result", OracleTypes.CURSOR, new RecordSetDTORowMapper())); 
         declareParameter(new SqlParameter("recoType", OracleTypes.NUMBER)); 
         compile(); 
        } 
    
        public List<RecordSetDTO> execute(int recoType) { 
         Map<String, Object> inputs = new HashMap<String, Object>(); 
    
         inputs.put("recoType", recoType); 
         return (List<RecordSetDTO>)super.execute(inputs).get("result"); 
        } 
    
    } 
    

    }

ストアドプロシージャの結果は、コードここ

List<RecordsetDTO> 

あります