Java 将手工SQL查询转换为框架查询(JPA/Hibernate)
我有一个项目,在那里我存储了盐渍哈希密码,如下所示:Java 将手工SQL查询转换为框架查询(JPA/Hibernate),java,sql,database,hibernate,jpa,Java,Sql,Database,Hibernate,Jpa,我有一个项目,在那里我存储了盐渍哈希密码,如下所示: byte[] salt = getSalt(); sql = "INSERT INTO user_login (user_mail, user_handle, user_password, user_salt) VALUES (?,?, SHA2(CONCAT(?, ?), 256), ?)"; prepStmt = conn.prepareStatement(sql); prepStmt.setString(1, u
byte[] salt = getSalt();
sql = "INSERT INTO user_login (user_mail, user_handle, user_password, user_salt) VALUES (?,?, SHA2(CONCAT(?, ?), 256), ?)";
prepStmt = conn.prepareStatement(sql);
prepStmt.setString(1, user.getUserMail());
prepStmt.setString(2, user.getUserHandle());
//Process password
prepStmt.setString(3, user.getUserPassword());
prepStmt.setBytes(4, salt);
prepStmt.setBytes(5, salt);
prepStmt.executeUpdate();
登录过程是:
sql = "SELECT * FROM user_login WHERE user_mail=? && user_password= SHA2(CONCAT(?, ?), 256)";
prepStmt = conn.prepareStatement(sql);
prepStmt.setString(1, user.getUserMail());
prepStmt.setString(2, user.getUserPassword());
prepStmt.setBytes(3, salt); // being retrieved beforehand
res = prepStmt.executeQuery();
更新内容如下:
sql = "UPDATE user_login SET user_password = SHA2(CONCAT(?, ?), 256), user_salt = ? WHERE user_id=?";
prepStmt = conn.prepareStatement(sql);
// Process password
prepStmt.setString(1, newPassword);
prepStmt.setBytes(2, newSalt); // being generated beforehand
prepStmt.setBytes(3, newSalt);
prepStmt.setInt(4, currentUser.getUserId());
最重要的部分是这个,数据库在这里进行盐析和哈希运算
SHA2(CONCAT(?, ?), 256)
问题:
- 我如何将这部分翻译成JPA/Hibernate
- 是否可以使用“@Query”、“@Formula”或其他方法,例如
- 一开始就可以翻译吗?如果没有,有没有办法实施这样一个计划 没有JPA/Hibernate冲突的东西
- 我应该使用数据库触发器/过程吗*
*编辑注意SHA-2不适用于密码。很高兴听到这一点,我稍后会解决这一部分,但问题的核心是什么?可能是重复的,请参考此部分