日期:2014-05-16  浏览次数:20475 次

在hibernate 中如何转换JDBC的操作?
//方法如下
public void deleteBatch(int userid) throws Exception{
String hql = "DELETE FROM Stock AS stock WHERE stock.userid=?";
Connection conn = (Connection) session.connection();
PreparedStatement pstmt = conn.prepareStatement(hql);
pstmt.setInt(1, userid);
pstmt.executeUpdate();
pstmt.close();
conn.close();
}
//这是它所报的异常
java.lang.ClassCastException: $Proxy0
at com.icxq.impl.StockDAOImpl.deleteBatch(StockDAOImpl.java:51)
at com.test.Test.main(Test.java:12)
1 楼 7upCat 2008-08-04  
说实在的没有看懂你的这部分代码的意思.

如果你想使用hibernate进行删除.
直接用 session.delete(Object);
       这个Obejct对象就是含有oid的要被删除的实体.
       比如你这个例子里的 Stock 
       Stock  stock=new Stock();
         stock.setOid("1");
    session.delete(stock);

就可以了.

      
2 楼 ada1230 2008-08-04  
7upCat 写道
说实在的没有看懂你的这部分代码的意思.

如果你想使用hibernate进行删除.
直接用 session.delete(Object);
       这个Obejct对象就是含有oid的要被删除的实体.
       比如你这个例子里的 Stock 
       Stock  stock=new Stock();
         stock.setOid("1");
    session.delete(stock);

就可以了.

      

谢谢你的关注,我明白你的意思,但我想实现一个批量删除,JDBC删除的效率高于“ session.delete(stock);”
所以我想“转换”
希望说明白了^_^
3 楼 andy54321 2008-08-04  
ada1230 写道
我想实现一个批量删除,JDBC删除的效率高于“ session.delete(stock);”
所以我想“转换”
希望说明白了^_^


若想利用hibernate的删除功能,还想批量,个人不知道有什么办法
因为在hibernate中的delete方法,是delete(stock对象),而此处是以其id定位,随之删除,
不似进行 insert、update 操作会有缓存处理
4 楼 movingboy 2008-08-05  
使用Hibernate实现批量删除其实很容易。例如
Query q = session.createQuery(
  "delete Stock s where s.userId = :userid");
q.setParameter("userid", userid, Integer);
q.executeUpdate();

不过要注意批量操作直接更改数据库,没有更新Hibernate的一级、二级缓存
5 楼 卡拉阿风 2008-08-06  
删除的时候。注意内存溢出
6 楼 movingboy 2008-08-06  
<div class='quote_title'>卡拉阿风 写道</div>
<div class='quote_div'>删除的时候。注意内存溢出</div>
<p>为什么要注意这一点,能否详细说说?</p>