2012-01-23 4 views
10

データベースの作業では、私のクラスはHibernateDaoSupportクラスを拡張し、メソッドの中で私は春を使用していますHibernateTemplate春のHibernateTemplateの使用。 IDで削除するには?

public void delete(MyObject obj) { 
    getHibernateTemplate().delete(obj); 
} 

すべてOK:

だから、私のためにこの方法を使用するデータベース内の行を削除します!

しかし、この時点で私はIDに基づいて行を削除することができますメソッドを実装しようとしているが:
getHibernateTemplate().remove(id)

public void delete(final long id) { 
    // some code here 
} 

そして、私はこのようないくつかのHibernateTemplate方法を見つけることができません

この場合、私にとってどのような良い解決策がありますか?

答えて

28

は、特定のIDを使用して削除し、

public void delete(long id) 
{ 
    Session session ; 
    MyObject myObject ; 

    session = sessionFactory.getCurrentSession(); 
    myObject = (MyObject)session.load(MyObject.class,id); 
    session.delete(myObject); 

    //This makes the pending delete to be done 
    session.flush() ; 

} 

ものHibernateTemplateで、このような方法はありませんよ、/ついにのtry/catchでこのメソッドをencapuslate、あなたが言及したように必要な

+1

これは、最も洗練されたソリューション(sql/hqlクエリを使用しない)のようですが、オブジェクトを削除するためにオブジェクト全体を分割するように見えるので、非効率的です。それは事実ですか?もしそうなら、何ができますか? –

+0

idが存在しない場合、 'myObject'はnullになり、' delete() 'はエラーを引き起こす可能性がありますか? – NingLee

+0

@NingLeeはい、オブジェクトが存在すると見なすため、例外が発生します。このような例外を避けたいのであれば、 'load'ではなく' get'を使用してください。 –

7

としてエラーを記録考えます。あなたは、次のことを行うことができます

hibernateTemplate.delete(hibernateTemplate.get(Class,Id)); 
+0

うわー、これはカスケード削除も処理します!! – Jess

6
あなたはまた、法の下に使用することができます

public void deleteById(Class clazz,Integer id) { 
    hibernateTemplate.bulkUpdate("delete from "+clazz.getName()+" where id="+id); 
} 
8

別の方法がある:オブジェクトを作成し、のみ設定することにより、簡単な解決策はあり

public void deleteById(Class clazz,Integer id) { 
    String hql = "delete " + clazz.getName() + " where id = :id"; 
    Query q = session.createQuery(hql).setParameter("id", id); 
    q.executeUpdate(); 
} 
1

ID:

この単純なソリューションの欠点は、関連するインスタンスを削除しないことです。
削除する製品の属性(別のエンティティに関連する)がある場合は、前もって製品を読み込む必要があります。

Serializable id = new Long(17); 
Object persistentInstance = session.load(Product.class, id); 
if (persistentInstance != null) 
{ 
    session.delete(persistentInstance); 
} 

これは、(属性表がカスケードである場合)子属性の削除を発行します。

関連する問題