2011-12-23 2 views
1

가정하자 나는 다음과 같은 형식의 Oracle 저장 프로 시저가 : 내 Java 응용 프로그램에서 호출 할 필요가최대 절전 모드 - SQL 쿼리에 매개 변수로 엔티티를 통과

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

을, 그래서 나는 sql-query 등으로 만든 이 :

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

그런 다음이 쿼리를 만들고 이러한 모든 속성을 수동으로 바인딩합니다. 내가 실제로하고 싶은 것은 다음과 같이 전체 엔티티를 바인딩하는 것입니다.

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

그러나 작동하지 않습니다. 어떻게 든 이것을 할 수 있습니까?

답변

0

엔티티를 저장 프로 시저 매개 변수에 직접 매핑 할 수 있다고 생각하지 않습니다. 매개 변수를 하나씩 전달해야합니다.

을 나는 절차 '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> 

이다