JPA 重用一些"previous" JDBC 登录凭证



我不知道这是否真的是一个错误......似乎有些东西仍然"开放"。我正在使用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 将替换现有键的值,如果不存在,将创建它。

最新更新