У меня есть хранимая процедура, как указано ниже:
PROCEDURE TestABC (tableName IN VARCHAR2, cardID IN VARCHAR2, detail OUT UserDefineObjectA, td OUT UserDefineObjectB);
UserDefineObjectA
, UserDefineObjectB
оба определены пользователем, и оба имеют одинаковые поля, и я исключаю, что оба объекта должны вернуться из процедуры. За возвратом обоих объектов стоит некоторое дело.
Я написал класс метода с аннотацией @Repository
, который имеет следующий метод. Я использую аннотацию @Procedure
от spring-data -jpa
. Текущая реализация @Procedure
может занять только один outputParameterName
. Но для моего случая я исключаю возвращение двух пользовательских типов объектов.
@Procedure(procedureName = "TestABC" , outputParameterName = "{UserDefineObjectA, UserDefineObjectB}")
public List<Object[]> getAllDetails(@Param("tableName") String tableName, @Param("cardID ") String cardID);
Затем я попробовал разные подходы, используя @NamedStoredProcedureQuery
. Но проблема с этим подходом заключается в том, что я должен записать все эти запросы в метку Entity, которые добавляют больше сложности. Я должен создать сущность и записать все хранимые процедуры и вызвать репозиторий, как показано ниже:
как получить пользовательский SQL параметр процедуры из 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();