6

テーブル「users」があり、多くの列があります。そのうちの2つは「Username」と「Password」です。usernameは主キー列です。

ユーザー名のパスワードを更新したい。これが私のコードです。正常に動作していますが(エラーや例外はありません)、パスワードは更新されていません。

私はHibernateを初めて使用し、その構文についてはあまり知りません。私を助けてください

 String query = "UPDATE users SET Password = '"+ newPassword +"' WHERE Username = '"+ login.getUsername() + "'";

 session.createSQLQuery(query);

login.getUsername()は必要なユーザー名を正しく取得しています

残りのコードは正常に機能しています問題は上記のコードにあります。

4

3 に答える 3

11

クエリを作成しましたが、実行していません。

SQLQuery sqlQuery = session.createSQLQuery(query);
sqlQuery.executeUpdate();

ご了承ください

  • パラメータを連結する代わりに、名前付きパラメータを使用する必要があります。これにより、SQLインジェクション攻撃、またはパスワードまたはユーザー名に含まれている場合の単なるエラーを防ぐことができます'
  • Hibernateでは、通常、次のような単純な操作を行います。

-

User u = session.get(User.class, userName);
u.setPassword(newPassword);
于 2012-06-08T12:19:28.087 に答える
3

実行メソッドを忘れただけです。

String query = "UPDATE users SET Password = '"+ newPassword +"' WHERE Username = '"+            login.getUsername() + "'";
try {
    s.getTransaction().begin();
    s.createSQLQuery(query).executeUpdate();
    s.getTransaction().commit();
    s.close();
}
catch (HibernateException erro){
    s.getTransaction().rollback();
    s.close();
} 

SQLインジェクション攻撃、または単に文字列に依存するエラーを防ぐために、連結パラメータを使用しないことを強くお勧めします。HQLCriteriaを見てください。

于 2014-04-03T13:24:47.310 に答える
0

これが私のような人に役立つことを願っています

1つのフィールドを直接更新すると、他のすべてのフィールドがデフォルト値に設定されます。

Session session = factory.openSession();
Transaction tx = session.beginTransaction();
User user = new User();
user.password("xxxxx");
session.update(user);
tx.commit();
session.close();

上記のコードは、他のすべてのフィールドをデフォルト値に設定します。したがって、これを回避するには、テーブルからオブジェクトをフェッチしてから、それを変更して更新操作を実行する必要があります。

session.loadまたはを使用session.getしてオブジェクトをフェッチし、更新することができます。

コード

User u = session.load(User.class, userName);
u.setPassword(newPassword);

また

User u = session.get(User.class, userName);
u.setPassword(newPassword);

その後、実行する必要がありますsession.update(user)

完全なコード:

        SessionFactory factory = hibernateUtils.getSessionFactory();
        Session session = factory.openSession();
        Transaction tx = session.beginTransaction();
        User user = session.load(User.class, username);
        user.setPassword("xxxxxx");
        session.update(user);
        tx.commit();
        session.close();
于 2020-01-05T17:24:47.490 に答える