【发布时间】:2020-03-24 02:10:01
【问题描述】:
我有一个如下定义的存储过程:
PROCEDURE TestABC (tableName IN VARCHAR2, cardID IN VARCHAR2, detail OUT UserDefineObjectA, td OUT UserDefineObjectB);
UserDefineObjectA ,UserDefineObjectB 都是用户定义的对象,并且都具有相同的字段,除了两个对象都应该从过程中返回。返回这两个对象背后有一些业务。
我用@Repository 注释写了方法类,它有以下方法。我正在使用来自spring-data -jpa 的@Procedure 注释。当前实现@Procedure 只能采用一个outputParameterName。但就我而言,我除了返回两个用户定义类型的对象。
@Procedure(procedureName = "TestABC" , outputParameterName = "{UserDefineObjectA, UserDefineObjectB}")
public List<Object[]> getAllDetails(@Param("tableName") String tableName, @Param("cardID ") String cardID);
然后,我尝试了使用@NamedStoredProcedureQuery 的不同方法。但问题在于这种方法是我必须将所有这些查询写入实体标签,这会增加更多复杂性。我必须创建一个实体并编写所有存储过程并调用存储库,如下例所示:
how to get user-defined SQL procedure out parameter from java class
有没有更好的方法可以解决这个问题?我可以在我的类中的方法级别写@NamedStoredProcedureQuery,它被注释为@Repository。
我正在尝试实现的遗留代码示例。
callableStatement = connection.prepareCall("{call ABC(?,?,?,?)}");
callableStatement.setString(1, "test");
callableStatement.setString(2, "12345679090978");
callableStatement.registerOutParameter(3, Types.ARRAY, AConstants.UserDefineObjectA);
callableStatement.registerOutParameter(4, Types.STRUCT, AConstants.UserDefineObjectB);
callableStatement.execute();
return (Object[]) ((java.sql.Array) callableStatement.getObject(3)).getArray();
【问题讨论】:
标签: java stored-procedures spring-data-jpa