gpt4 book ai didi

java - 如何将多个游标解析为多个类

转载 作者:行者123 更新时间:2023-12-02 00:35:57 24 4
gpt4 key购买 nike

我必须调用此过程,但我想知道是否可以将所有 3 个游标解析为不同的类,例如:对于光标 1 getResultList() 将返回 class_1对于光标 2 getResultList() 将返回 class_2等等如果我使用相同的类作为结果类,一切都会按预期工作,但在某些情况下,我们可以有 3 个具有不同布局的游标。

        StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("Budget_Calc.Budget_By_Activity_Type",Curr.class);

storedProcedure.registerStoredProcedureParameter("P_Project_Id", Long.class, ParameterMode.IN);
storedProcedure.registerStoredProcedureParameter("P_Primary_Check_Id_I", Long.class, ParameterMode.IN);
storedProcedure.registerStoredProcedureParameter("P_Log_Id_I", Long.class, ParameterMode.IN);

storedProcedure.registerStoredProcedureParameter("P_Return_Set_Curr", void.class, ParameterMode.REF_CURSOR);
storedProcedure.registerStoredProcedureParameter("P_Return_Set_Appr", void.class, ParameterMode.REF_CURSOR);
storedProcedure.registerStoredProcedureParameter("P_Return_Set_All", void.class, ParameterMode.REF_CURSOR);

storedProcedure.registerStoredProcedureParameter("P_Execution_Status_O", Long.class, ParameterMode.OUT);

storedProcedure.setParameter("P_Project_Id", projectId);
storedProcedure.setParameter("P_Primary_Check_Id_I", P_Primary_Check_Id_I);
storedProcedure.setParameter("P_Log_Id_I", P_Log_Id_I);

最佳答案

简短回答:使用 JPA 可能无法做到这一点,但手动完成很容易

首先,您需要从过程中获取 ResultSet,如下所示:

 ResultSet resultSet = (ResultSet) storedProcedure.getOutputParameterValue("P_Return_Set_O");

然后将其解析为 POJO,重要的是要看到我为 Names 列构建了一个映射,因为并非所有字段都是必填的,因此这为您提供了更多的灵 active

public class EntityParser {

public static <T> List<T> parseResultSet(ResultSet resultSet, Class<T> entityClass) throws Exception {

HashMap<String,String>mapColumnName = getMapColumnName(resultSet);

List<T> list = new ArrayList<>();

while (resultSet.next()) {

T t = entityClass.newInstance();

Field[] fieldClass = entityClass.getDeclaredFields();

for (Field field: fieldClass){

if (field.isAnnotationPresent(Column.class)) {
field.setAccessible(true);
String columnName = field.getAnnotation(Column.class).name();

if(mapColumnName.containsKey(columnName.toUpperCase()))
field.set(t,resultSet.getObject(columnName,field.getType()));

}
}

list.add(t);

}
return list;
}

private static HashMap<String,String> getMapColumnName(ResultSet resultSet) throws SQLException {

ResultSetMetaData meta = resultSet.getMetaData();
int columnCount = meta.getColumnCount();
HashMap<String,String>mapColumnName = new HashMap<>();

for (int i = 1; i <= columnCount; i++) {
String columnName=meta.getColumnName(i).toUpperCase();
mapColumnName.put(columnName,columnName);
}

return mapColumnName;
}

}


关于java - 如何将多个游标解析为多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57973768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com