0

WHERE 句を使用して SQL/HQL ステートメントを実行しようとすると問題が発生します。

エラーなしで呼び出されると、アプリケーションはこのメソッドに接続して実行します。

public void listPlayers( ){
      Session session = sessionFactory.openSession();
      Transaction tx = null;
      try{
         tx = session.beginTransaction();
         List players = session.createQuery("FROM Player").list(); 
         for (Iterator iterator = 
                           players.iterator(); iterator.hasNext();){
            Player player = (Player) iterator.next(); 


           String tmpMessage = player.getFirstName().toString();
           System.out.println(tmpMessage);
              writer.write("First Name: "+player.getPlayerName()+", Wealth: "+player.getWealth()+"\r\n");
             writer.flush();

         }
         tx.commit();
      }catch (HibernateException e) {
         if (tx!=null) tx.rollback();
         e.printStackTrace(); 
      }finally {
         session.close(); 
      }
   }

しかし、私がこれをやろうとすると; 次のエラーが表示されます: player_name フィールドが見つかりません:

      public void loadPlayer(String usr){
      Session session = sessionFactory.openSession();


      Transaction tx = null;
      try{
         tx = session.beginTransaction();
         String hql = "SELECT * FROM Player P WHERE P.player_name = "+usr;
         Query query = session.createQuery(hql); 
         List players = query.list();
         for (Iterator iterator = 
                           players.iterator(); iterator.hasNext();){
            Player player = (Player) iterator.next(); 

            System.out.print("  Location: " + player.getLocation()); 
            System.out.println("  Wealth: " + player.getWealth()); 
         }
         tx.commit();
      }catch (HibernateException e) {
         if (tx!=null) tx.rollback();
         e.printStackTrace(); 
      }finally {
         session.close(); 
      }
   }

mySQL データベースには、列の値として pID、player_name、location、wealth を持つ Player という名前のテーブルがあります

プレーヤーに関連付けられているすべての情報を検索してソケットに書き戻すことができるように、プレーヤー名を loadPlayer(String username) メソッドに渡そうとしています。ここで何が間違っていますか?

4

1 に答える 1

1

あなたのクエリは正しくないと思います。このようなことを試してください

String hql = "SELECT * FROM Player P WHERE P.playerName = :playerName";         
Query query = session.createQuery(hql); 
query.setParameter("playerName", usr);
于 2013-07-28T13:23:24.913 に答える