休眠 - 传递一个实体作为参数传递给一个SQL查询
问题描述:
假设我有以下形式的Oracle存储过程:休眠 - 传递一个实体作为参数传递给一个SQL查询
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);
但它不起作用。以某种方式可以做到这一点吗?
答
我不认为你可以将实体直接映射到存储过程参数。 您必须逐个传递参数。
如果要调用存储过程,如果你有春天,试试这个:
我调用过程“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");
}
}
}