2011-07-13 17 views
0

私はデータベースにアクセスするためにHibernateを使用しています。私は基準の機能のフィールドのセットを削除したいと思います。私のデータベースはPostgreSQLで、私のJavaコードはデータベースからデータを削除する際の問題

public void deleteAttr(String parameter){ 
    Configuration cfg = new Configuration(); 
    cfg.configure(resource.getString("hibernate_config_file")); 
    SessionFactory sessionFactory = cfg.buildSessionFactory(); 
    session = sessionFactory.openSession(); 
    Transaction tx = session.beginTransaction(); 
    tx.begin(); 
    String sql = "delete from attribute where timestamp > to_date('"+parameter+"','YYYY-MM-DD')" 
    session.createSQLQuery(sql); 
    tx.commit(); 
} 

です。メソッドは実行されますが、データベースからデータは削除されません。私はPgAdminのSQL文もチェックしていますが、コードでは動作しません。どうして?誰かが私を助けますか?

ありがとうございます!

答えて

2

クエリを作成しているためですが、あなたはそれを実行しないでください:

String sql = "delete from attribute where timestamp > to_date('"+parameter+"','YYYY-MM-DD')" 
Query query = session.createSQLQuery(sql); 
query.executeUpdate(); 

あなたが本当にあなたのクエリにパラメータを渡すためにバインドされ、名前付きパラメータではなく、文字列の連結を使用する必要があります。それは、通常、より効率的です、はるかに堅牢ですが、とりわけ、SQLインジェクション攻撃の扉を開けません。

+0

ありがとうございます!あなたが束縛された名前付きのパラメータを言うとき、あなたは何を言いたいのですか?私は、基準と制限のクラスを使用すると思う... –

+0

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#objectstate-querying-executing-parametersを読んでください。 –

関連する問題