作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须调用此过程,但我想知道是否可以将所有 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/
我是一名优秀的程序员,十分优秀!