2016-12-03 6 views
0

Webアプリケーションでデータベース内の行を削除しようとしていますが、動作していないように見えます。ここに私のDAOクラスです:Java、Hibernate、サーブレットを使用してデータベースから行を削除する

public class userDao { 

private SessionFactory factory, session; 

public userDao(SessionFactory factory) { 
    this.factory = factory; 
} 

public void delete(long id){ 
    Session session1 = factory.openSession(); 
    Transaction tx = null; 
    List<User> u = null; 
    try { 
     tx = session1.beginTransaction(); 
     Query query = session1.createQuery("SELECT * FROM user_table WHERE id = :id"); 
     query.setParameter("id", id); 
     System.out.println("aaaaa" + id); 
     u = query.list(); 
     session1.delete(u.get(0)); 
     tx.commit(); 
    } catch (HibernateException e) { 
     if (tx != null) { 
      tx.rollback(); 
     } 

    } finally { 
     session1.close(); 
    } 

} 
} 

そして、私のサーブレットに私が持っている:

public class DeleteServlet extends HttpServlet{ 
userDao u = new userDao(new Configuration().configure().buildSessionFactory()); 
User a = new User(); 
public void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException{ 
    System.out.println("asa"); 
    response.sendRedirect("/A1.2/home.jsp"); 
} 


@Override 
public void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException{ 
    String s = request.getParameter("id"); 
    long id = Long.parseLong(s); 
    u.delete(id); 

    response.sendRedirect("/A1.2/home.jsp"); 
} 
} 

私は、データベースからユーザーを取得しようとしましたし、私がnullを得たので問題はDAOであると思いますポインタ例外。

警告: log4j:WARN logger(org.hibernate.type.BasicTypeRegistry)のアペンダーは見つかりませんでした。 log4j:WARN log4jシステムを適切に初期化してください。 log4j:WARN詳細については、http://logging.apache.org/log4j/1.2/faq.html#noconfigを参照してください。

+0

エラーメッセージまたは完全なスタックトレースがありますか。それがあれば、それを質問に含めてください。 – msagala25

+0

エラーメッセージは表示されませんが、警告が表示されます。 – user3848412

答えて

0

HQLを使用している場合は、表の列の代わりに表の名前ではなくクラスの名前を使用する必要があります。あなたのクラスの名前はuser_tableですか? idはクラスプロパティまたは列の名前ですか?

+0

user_tablはテーブルで、idは列ですが、私はクラスとしてUser.javaを持っていますが、proprety idは列と同じ名前です。 – user3848412

+0

だから、あなたは 'SELECT * FROM User WHERE id =:id'ですべきです。その前に、Userクラスとuser_tableでマッピングを行う必要があります。別のものは、なぜあなたは、ユーザーを取得し、それを削除するよりも?なぜあなたは削除クエリを直接 'ユーザからの削除' id =:id'を使わないのですか? – Alee

+0

私は試しましたが、うまくいかず、理由は分かりません – user3848412

関連する問題