hibernate 中delete方法删除对象的时候,这个delete方法会转化为一条delete的sql语句,请问这个sql里的where条件部分是只有主键相等,还是每个列值都相等。
如下例:
Userinfo 类有userid ,username,userdescription这几个属性,对应数据库中的userinfo这张表 userid为主键
执行session.delete(Userinfo )的时候,会执行那种sql 
类似这样的:delete * from Userinfo where userid=userid 
还是:delete * from Userinfo where userid=userid && username=username && userdescription= userdescription
有源码的贴上一段让看看,谢了。

解决方案 »

  1.   

    delete * from Userinfo where userid=userid 这样的
      

  2.   

    session.delete(Userinfo )
    删除实体的时候 用的是主键删除
      

  3.   

    我想着也是这样的,
    有没有像spring-sources.jar 这样的关于hibernate的jar,刚在网上搜了没收到有的话给我发份吧,[email protected] 40分都给你了。。
    哈哈
      

  4.   

    不过 一般情况下都不用删除,为了以后能查询历史记录,所以一般不采取删除,都是用修改,
    UPDATE  EMPLOYEEINFO SET EMP_STATE=0   让 state 状态设置成 0 ,默认情况下表的state字段是 1 所以查询的时候 用  select * from user where state=1  希望对你有帮助
      

  5.   

    hibernate 包  下载
    http://down.51cto.com/data/72146/ 注册一个号就可以下载啦
    Hibernate核心包 介绍(不是下载) http://wenku.baidu.com/view/5f65b42e0066f5335a8121bb.html希望对你有帮助
      

  6.   

    delete()方法用于从数据库中删除与Java对象对应的记录。如果传入的参数是持久化对象,Session就计划执行一个delete语句。如果传入的参数是游离对象,先使游离对象被Session关联,使它变为持久化对象,然后计划执行一个delete语句。值得注意的是,Session只有在清理缓存的时候的才执行delete语句。此外,只有当调用Session的close()方法时,才会从Session的缓存中删除该对象。例如以下代码先加载一个持久化对象,然后通过delete()方法将它删除:Session session1 = sessionFactory.openSession();  
     
    Transaction tx1 = session1.beginTransaction();  
     
    // 先加载一个持久化对象  
     
    Customer customer = (Customer)session.get(Customer.class, new Long(1));  
     
    session.delete(customer); // 计划执行一个delete语句  
     
    txt1.commit(); // 清理缓存,执行delete语句  
     
    session.close();子// 从缓存中删除Customer对象  
    以下代码直接通过delete()方法删除一个游离对象:Session session2 = sessionFactory.openSession();  
     
    Transaction tx2 = session1.beginTransaction();  
     
    // 假定customer是一个游离对象,先使它被Session关联,使它变为持久化对象,  
     
    // 然后计划执行一个delete语句  
     
    session2.delete(customer);  
     
    tx2.commit(); // 清理缓存,执行delete语句  
     
    session2.close(); // 从缓存中删除customer对象  
    如果希望删除多个对象,可以使用另一种重载形式的delete()方法:session.delete("from Customer as c where c.id>8"); 
    以上delete()方法的参数为HQL查询语句,delete()方法将从数据库中删除所有满足查询条件的记录。
      

  7.   

    delete(HQL) 删除查找到的对象。delete(object) 直接删除一个对象。 ============================
    代码呵~~~方法一:
    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();SomeObject someObject = (SomeObject)sesson
        .get(SomeObject.class,new Long(1));
    session.delete(someObject);tx.commit();
    session.close();方法二 
    中间的删除换成
    session.delete("from SomeOjbect o where o.id>1"); 
      

  8.   

    哥们你给我发的啥啊
    就这个吗?
    这是你要的源码。--    致
    礼!                                                     kai27ks                                                   
      

  9.   

    感觉session.delete(Userinfo)应当会执行这样的sql:delete from userinfo 。把表中的所有数据都删除。 想根据主键删除一条记录可以这样做吧:void deleteById(Class clazz,String Id){
    getHibernateTemplate().delete(get(clazz,Id));
    }
    object get(Class entity, Serializable id){
    return getHibernateTemplate().get(entity, id);
    }
    在删除一条记录的时候的时候直接调用 deleteById(Class clazz,String Id)方法就可以了吧
      

  10.   

    估计是我没有说清楚,我是想要能看到hibernate源码的jar吧,就像可以用spring-sources.jar 查看spring源代码的这样的jar貌似该是hibernate-sources.jar
      

  11.   

    你这个是不对的不是执行这样的,delete方法穿进去的是一个对像相当于数据库中一条记录,怎么会把表中所有数据都删除了哪?我刚看了一下log里出来的日志,确实是按照主键删除的
      

  12.   

    hibernate 所有的包都在这  任何版本的都有 http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/h/project/hi/hibernate/hibernate3/
      

  13.   

     3.6.0.Beta1    22-Jul-2010   97.8M of files inside
     3.6.0.Beta2    05-Aug-2010   98.1M of files inside
     3.6.0.Beta3    19-Aug-2010   56.8M of files inside
     3.6.0.Beta4    02-Sep-2010   98.4M of files inside
     3.6.0.CR1    16-Sep-2010   98.4M of files inside
     3.6.0.CR2    30-Sep-2010   98.9M of files inside
     3.6.0.Final    14-Oct-2010   255.1M of files inside
      

  14.   

    Hibernate中的delete方法是根据主键删除的!