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) メソッドに渡そうとしています。ここで何が間違っていますか?