@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时,请使用默认提供的JdbcTemplate
或NamedParameterJdbcTemplate
。
插入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管理的情况下!),并且还将参与同一事务。