我遵循这个example使用Spring Data JPA调用存储过程。其思想是创建一个实体并像这样定义namedstoredprocedure。
@Entity
@Table(name = "TRFTABLE")
@NamedStoredProcedureQuery(
name = "processFmTrf",
procedureName = "FM_TRF_UTIL.process_fm_trf",
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "i_trf_list", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "i_source_system", type = String.class)
}
)
public class TrfTable implements Serializable{
}
对于带有原始类型的输入参数,这是非常简单的,例如。String.class.然而,我的存储过程的一个输入是一个数组。我知道如何使用CallableStatement调用stored proc来处理数组,如下所示:
Connection con = getConnection();
OracleConnection oraCon = con.unwrap(OracleConnection.class);
// fileArray predefined.
Array array = oraCon.createARRAY("VARCHAR2_TAB_T", fileArray);
CallableStatement stmt = con.prepareCall("{call FILE_TRANSFER_AUDIT_UTIL.update_file_queue_id(?,?,?,?,?,?)}");
stmt.setArray(1, array);
看起来必须建立DB连接才能将数组传递给存储过程。如何使用NamedStoredProcedure为我的实体类完成此操作?
2条答案
按热度按时间7eumitmz1#
这应该可以工作:
ryevplcw2#
NamedStoredProcedureQuery不适用于传入数组,因为它需要数据库连接。我所做的是从entitymanager创建一个会话,并在doWork方法中使用数组调用存储过程: