Hibernate - 将实体作为参数传递给SQL查询

时间:2011-12-23 09:58:04

标签: java hibernate

假设我有以下形式的Oracle存储过程:

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

我需要从我的Java应用程序中调用它,所以我做了sql-query这样:

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

然后我创建此查询并手动绑定所有这些属性。我真正想做的是绑定整个实体,如下所示:

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

但它不起作用。有可能以某种方式这样做吗?

1 个答案:

答案 0 :(得分:0)

我认为您不能将实体直接映射到存储过程参数。 你必须逐个传递参数。

如果要调用存储过程,如果有Spring,请尝试:

我正在调用'rex_datainterface.getfieldtype'过程并传递2个参数:

  • recoType(NUMBER)IN。
  • 结果(CURSOR)OUT。

存储过程的结果是

List<RecordsetDTO>

以下是代码:

    @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");
    }

}

}