Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将手工SQL查询转换为框架查询(JPA/Hibernate)_Java_Sql_Database_Hibernate_Jpa - Fatal编程技术网

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不适用于密码。很高兴听到这一点,我稍后会解决这一部分,但问题的核心是什么?可能是重复的,请参考此部分