@Override
    public HashMap<Integer, String> getTestNameIds(List<String> selectedTestnames) {

        HashMap<Integer, String> testNameIdsMap=new HashMap<Integer, String>();


        StringJoiner selectednames = new StringJoiner("','", "'", "'");
        for (String string : selectedTestnames) {
            selectednames.add(string);
        }
        try (Session session = sessionFactory.openSession();
                SessionImpl sessionImpl = (SessionImpl) session;
                java.sql.Connection connection = sessionImpl.connection();
                PreparedStatement st = connection.prepareStatement("select t.testId,t.testName FROM testsmaster t WHERE testName IN("
                                + selectednames + ") order by testId;");) {

            try (ResultSet rs = st.executeQuery();) {
                while (rs.next()) {
                    testNameIdsMap.put(Integer.parseInt(rs.getString("testId")), rs.getString("testName"));
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }



            return testNameIdsMap;


}


在使用带有会话对象的资源的try时出现错误。

最佳答案

不要使用这种设备。使用Spring Boot时,请使用默认提供的JdbcTemplateNamedParameterJdbcTemplate

插入NamedParameterJdbcTemplate并重写代码

@Autowired
private NamedParameterJdbcTemplate jdbc;


然后在您的方法中使用它执行查询。

String SQL = "select t.testId,t.testName FROM testsmaster t WHERE testName IN(:names) order by testId";

Map<Integer, String> result = new HashMap<Integer, String>()

jdbc.query(SQL, Collections.singletonMap("names", testNames), (rs, num) -> result.put(rs.getInteger("testId), rs.getString("testName"));

return result;



这将使用与Hibernate相同的活动Connection(在正确使用Hibernate和Spring TX管理的情况下!),并且还将参与同一事务。

10-06 05:02
查看更多