使用 hibernate/JPA 登录

Login using hibernate/JPA

您好,我正在尝试创建一个登录表单并使用休眠框架。

        String user = request.getParameter("username");
    String password = request.getParameter("password");

    EntityManagerFactory entityFactory = Persistence
            .createEntityManagerFactory("test");
    EntityManager entityManager = entityFactory.createEntityManager();

    String select = "SELECT userName, passWord FROM UserAccounts WHERE userName='"
            + user + "' and passWord='" + password + "'";

    Query query = entityManager.createQuery(select);

    if(query.getResultList().size() == 0){
        System.out.println("Account does not exist!");
    }else{
        System.out.println("Login Success!");
        UserAccounts login = (UserAccounts) query; //error here
        System.out.println(login.getUserName());
    }

问题是我在尝试将查询结果转换为帐户对象时遇到错误。

正确的转换方式是什么? 谢谢!

使用HQL查询。它 returns class UserAccounts.

的实例
String selectQuery = "FROM UserAccounts WHERE userName= :user and passWord= :password";

selectQuery.setParameter("user", user);
selectQuery.setParameter("password", password);

使用Query#setParameter设置传递参数进行查询。

使用变量和绑定参数来防止注入攻击和select UserAccounts 对象。

String select = "SELECT ua FROM UserAccounts ua WHERE ua.userName=:userName and ua.passWord=:password";

Query query = entityManager.createQuery(select);
query.setParameter("userName", user);
query.setParameter("password", password);

使用getSingleResult(),因为user/password应该只标识一个用户。 (也可以防止一些攻击)并将其施放给 class 你 selected (a UserAccounts)

UserAccounts ua = (UserAccounts) query.getSingleResult();

PS:切勿在数据库中以明文形式存储密码。请改用单向哈希。例如。 bcrypt