我不知道这是否真的是一个错误......似乎有些东西仍然"开放"。我正在使用EclipseLink 2.5和com.microsoft.sqlserver.jdbc.SQLServerDriver。在创建实体管理器工厂方法的第二次调用中,错误的密码将被忽略,一切正常......我是否必须重置或清理某种连接或会话对象?
String userId = "sa";
String psw = "rightPassword";
Map<String, Object> paramsConnect = new HashMap<String, Object>();
paramsConnect.put("javax.persistence.jdbc.user", userId);
paramsConnect.put("javax.persistence.jdbc.password", psw);
EntityManagerFactory emf = Persistence.createEntityManagerFactory("PU", paramsConnect);
EntityManager em = emf.createEntityManager();
Query q = em.createNativeQuery("SELECT * FROM Tab1");
List<Object[]> rows = q.getResultList();
System.err.println(rows.get(0));
em.clear();
em.close();
emf.close();
psw = "wrongPassword";
EntityManagerFactory emf1 = Persistence.createEntityManagerFactory("PU", paramsConnect);
EntityManager em1 = emf1.createEntityManager();
Query q1 = em1.createNativeQuery("SELECT * FROM Tab2");
List<Object[]> rows1 = q1.getResultList();
System.err.println(rows1.get(0));
如果你想
在HashMap中使用键'javax.persistence.jdbc.password'来更改值,你需要改变这一行:
psw = "wrongPassword";
与行:
paramsConnect.put("javax.persistence.jdbc.password", "wrongPassword");
方法 put 将替换现有键的值,如果不存在,将创建它。